をし、持っている以下のモデル:理解ジャンゴGenericForeignKeyとGenericRelation
class Word(Model):
name = CharField(max_length=75)
class EnNoun(Model):
word = OneToOneField(Word)
class FrNoun(Model):
word = ForeignKey(Word)
gender = CharField()
同じ単語はEnNoun
とFrNoun
の両方にすることができます。 EnNoun
とFrNoun
の両方について、指定した単語の結果を最も少ない数のクエリを使用して取得することは可能ですか(言語と品詞の類似クラスはItAdverb
などあります)。
1つの言語から別の言語への翻訳を保存する方法(20以上のテーブルのクエリはオプションではありません)。
GenericForeign
どのようなキーですか? 一般的にどのように使用しますか?
ありがとうございます。
UPDATE:
には、次の翻訳クラスを持っている:
@python_2_unicode_compatible
class Translation(Model):
from_content_type = ForeignKey(ContentType, related_name='from_word_content_type')
from_object_id = UUIDField(default=uuid.uuid4)
from_word = GenericForeignKey('from_content_type', 'from_object_id')
to_content_type = ForeignKey(ContentType, related_name='to_word_content_type')
to_object_id = UUIDField(default=uuid.uuid4)
to_word = GenericForeignKey('to_content_type', 'to_object_id')
しかし、それは動作しません: フィールド「to_wordは」オートリバース関係を生成しないので、逆に使用することはできません照会。 GenericForeignKeyの場合は、GenericRelationを追加することを検討してください。
OK:私は考えることができる
別のアプローチは、以下のモデル構造を使用することです。ありがとうございました。私はこの場合GenericForeignKeyが効率的ではないと思います。しかし、私は今翻訳テーブルをやっています。そして私はそれが事実だと思います。アップデート –
を参照してください。この 'to_word'エラーが発生したら?何らかのフィルタリングをしようとしているようですね? 'from_word'と' to_word'属性に 'Word'クラスのみを使用している場合は、' GenericForeignKey'の代わりに通常の 'ForeignKey'を安全に使うことができます。 – Todor
私はget_or_createを使用しました。ジェネリックキーのフィルタリングはどのように行うのですか? –