2016-09-20 3 views
1

limit_choices_to(Django)でエンティティのインスタンスを取得する方法は?例えば

class Foo(models.Model): 
    bar = models.OneToOneField(
     'app.Bar', 
     limit_choices_to=Q(type=1) & Q(foo=None) | Q(foo=instance) 
    ) 


class Bar(models.Model): 
    TYPE_CHOICE = (
     (0, 'hello'), 
     (1, 'world') 
    ) 
    type = models.SmallIntegerField(
     choices=TYPE_CHOICE, 
     default=0 
    ) 

私はDjangoのadminにはFooさんとの関係を持っていないtype = 1を持っているだけでこれらのバーを、ショーをしたい、と(それがある場合)、編集されたエンティティのバーをリンクされ表示します。

formfield_for_foreignkeyの方法をadmin.ModelAdminに上書きすることもできますが、これはlimit_choices_toで行います。

編集エンティティのインスタンスを取得するにはどうすればよいですか?

+0

「Q(foo = None)| Q(foo = instance)」を実行できるかどうかはわかりませんが、Fooのインスタンスへの参照がここにあると仮定しています –

答えて

3

limit_choices_toに呼び出し可能コードを渡すと、その呼び出し可能コードは現在のインスタンスへの参照を持ちません。そのため、現在のインスタンスに基づいてフィルタリングすることもできません。

上記のformfield_for_foreignkey()を上書きする、フォームの__init__()メソッドでフォームフィールドのクエリーセットをオーバーライドするなど、いくつかの方法があります。 limit_choices_toちょうどそれらの1つではありません。

+0

辞書を渡す場合:ロジックはBar.objects.filter(....)のようなもので、利用可能なFooのインスタンスはありません。 –

関連する問題