【问题标题】:Use self in ModelForm fields在 ModelForm 字段中使用 self
【发布时间】:2020-06-20 10:49:42
【问题描述】:

我有一个 Formview 并将 pk 传递给 ModelForm。在 ModelForm 中,我无法在为字段定义的查询集中使用 self.pk:

views.py

[...]

def get_form_kwargs(self):
    # Pass extra kwargs to DetailProductForm
    kwargs = super(DetailProduct, self).get_form_kwargs()
    kwargs.update({'pk': self.kwargs['pk']})
    return kwargs

forms.py

class DetailProductForm(forms.ModelForm):


    def __init__(self, *args, **kwargs):
        # get the pk from the FormView at set it as self.pk
        self.pk = kwargs.pop('pk', None)
        super(DetailProductForm, self).__init__(*args, **kwargs)

    # use self.pk in my queryset (there are more fields who use self.pk, this is just one as an example)
    field = forms.ModelChoiceField(queryset=Configuration.objects.filter(product__pk=self.pk), widget=forms.RadioSelect)


    class Meta:
        model = Configuration
        fields = ['field']

NameError: name 'self' 未定义

如何将 self.pk 用于字段?

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    找到了解决办法。实际上,我什至不再需要 ModelForm。

    class DetailProductForm(forms.Form):
    
        field = forms.ModelChoiceField(queryset=None, widget=forms.RadioSelect)
    
        def __init__(self, *args, **kwargs):
            self.pk = kwargs.pop('pk', None)
            super().__init__(*args, **kwargs)
            self.fields['field'].queryset = Configuration.objects.filter(product__pk=self.pk))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-22
      • 2013-01-03
      • 2018-05-10
      • 2012-01-03
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多