Django ModelForm 如何在数据库中查询相应模型中的 ForeignKey 成员



我有两个模型 models.py

class Inner(models.Manager):
    name = models.CharField(max_length=256)
class Outer(models.Manager):
    name = models.CharField(max_length=256)
    inner = models.ForeignKey(Data)

然后我有一个ModelForm Outer.

class OuterModelForm(ModelForm):
class Meta:
    model = Outer
    fields = ['name', 'inner']

我的问题是,在生成的表单的下拉列表中显示可能的内在值时,ModelForm 会调用什么。

我已通过用自定义models.Manager覆盖objects来排除以下内容。(只需在其中添加打印并查看所谓的内容(

  • values
  • get
  • get_queryset
  • all
  • filter

这是表单字段的责任,它将调用其queryset属性。默认情况下,这只是相关类的默认管理器;在您的情况下,Data.objects.all().

若要更改此设置,请使用显式查询集重新定义字段:

class OuterModelForm(ModelForm):
    inner = forms.ModelChoiceField(queryset=Data.objects.filter(myparam='whatever'))

或者,如果需要它依赖于某个其他参数,请在 __init__ 方法中显式设置该属性:

class OuterModelForm(ModelForm):
    def __init__(self, *args, **kwargs):
        param = kwargs.pop('myparam', None)
        super(OuterModelForm, self).__init__(*args, **kwargs)
        self.fields['inner'].queryset = Data.objects.filter(myparam=param)

最新更新