Как передать аргумент классу формы в Django? - PullRequest
0 голосов
/ 29 мая 2019

Я хочу передать идентификатор продукта в мой класс форм, чтобы создать форму с этим элементом в моей базе данных.

Моя форма:

class Order_form(forms.Form):
    def __init__(self, product_id,*args,**kwargs):

        self.add_option = forms.ModelMultipleChoiceField(widget = forms.CheckboxSelectMultiple, required = False, queryset=product.objects.get(id = product_id).add_option.all())
        super(Order_form,self).__init__(*args,**kwargs)

Форма выше ничего не создает, но эта форма создает именно то, что мне нужно. Тем не менее, мне нужно передать product_id динамически, и не нужно жестко кодировать 1 как идентификатор:

class Order_form2(forms.Form):
    add_option = forms.ModelMultipleChoiceField(widget = forms.CheckboxSelectMultiple, required = False, queryset=product.objects.get(id = 1).add_option.all())

PS: все работает благодаря ответу и комментариям ниже, теперь моя форма выглядит так

class Order_form(forms.Form):
    add_option = forms.ModelMultipleChoiceField(widget = forms.CheckboxSelectMultiple, required = False, queryset=None)
    def __init__(self, product_id,*args,**kwargs):
        super(Order_form, self).__init__(*args, **kwargs)
        self.fields['add_option'].queryset=product.objects.get(id = product_id).add_option.all()

1 Ответ

0 голосов
/ 29 мая 2019

Это примерно так и должно быть.

class Order_form(forms.Form):
    def __init__(self, product_id,*args,**kwargs):
        super().__init__(product_id, *args, **kwargs) # This is the default stuff that forms.Form does

         # You need to add this part so that it edits the field after creation
        self.fields['add_option']= forms.ModelMultipleChoiceField(widget = forms.CheckboxSelectMultiple, required = False, queryset=product.objects.get(id = product_id).add_option.all())
        # super(Order_form,self).__init__(*args,**kwargs) this  would re-overwrite it so we don't want it here

Обычно это делается в Django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...