2012-03-09 15 views
1

filterとm2mの関係とrequest.LANGUAGE_CODEに関する問題が発生しました。Django - フィルタmanytomanyフィールド - request.LANGUAGE_CODE

ビューでは、最初の例でrequest.LANGUAGE_CODEを使用すると、使用可能な各言語のすべての可能なエントリが返されます。

2番目のモデルではすべてが完全に機能しますが、

例 - 動作していない:

モデル:

class Publisher(models.Model): 
    publication = models.ManyToManyField('Translation', related_name="") 

ビュー:

pub = Publisher.objects.filter(publication__language=request.LANGUAGE_CODE) 

例 - ワーキング:

モデル:

class Publisher(models.Model): 
    title = models.CharField(max_length=256, verbose_name="Tytuł", blank=True, null=True) 
    text = models.TextField(verbose_name="Treść", blank=True, null=True) 
    language = models.CharField(max_length=8, choices=settings.LANGUAGES, default=settings.LANGUAGES[1]) 

ビュー:

pub = Publisher.objects.filter(language=request.LANGUAGE_CODE) 

がどのように仕事とどのように修正するか、その問題を回避するためですか?

答えて

0

language属性は、最初の例の翻訳オブジェクトの一部であり、2番目の例のPublisherの一部です。また、最初のパブリッシャーでは独自のテキストはありませんが、テキストを保持しているM2Mから翻訳オブジェクトを参照しています。

最初の例では、TranslationsではなくPublishers(メンバーの出版物によってリンクされている)を選択するように求めています。したがって、パブリッシャーが翻訳オブジェクトをクエリ言語で持っている場合は、そのパブリッシャーを取得し、pub.publication.all()のようなものを実行すると、求めていることが実行されます。関連するすべてのパブリケーションオブジェクトその出版社と任意の言語のあなたは、翻訳オブジェクトは、テキストと言語の設定データを持っているので、あなただけの、特定の言語のすべての記事の一覧が必要な場合は

pub = Translation.objects.filter(language=request.LANGUAGE_CODE) 

のような何かをする必要はありません最初の例を修正するには

出版社。

あなたは、ある特定の出版社から特定の言語のすべての記事の一覧が必要な場合は、同様に、他のフィルタ変数を追加します。あなたがその特定の出版社(および設定related_nameを特定したい

pub = Translation.objects.filter(language=request.LANGUAGE_CODE, publisher=publisher_id) 

またはどのような方法=あなたが逆の関係にすることはできないので、 ""は悪い考えです)。

また、私はPublisher.publicationの関係をForeignKeyに変更します。なぜなら、複数のパブリッシャーが同じ記事の別のパブリッシャーと一緒に作業している場合、M2Mが必要ない、O2Mが必要な状況(1つの出版社は多くの出版物/翻訳を書いている)。

関連する問題