Используйте self в полях ModelForm - PullRequest
0 голосов
/ 08 марта 2020

У меня есть Formview и я передаю ПК в 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: имя 'self' не определено

Как я могу использовать self .pk для полей?

1 Ответ

0 голосов
/ 08 марта 2020

Нашел решение. Мне даже больше не нужен 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))
...