получить параметр из URL-адреса в скрытый параметр формы - PullRequest
0 голосов
/ 14 июля 2020

У меня есть CreateView, где я хочу создать новую цену для продукта. На странице сведений о продукте есть кнопка для изменения цены, которая ведет к новой странице, например ...\partprice\X, где X - идентификатор продукта. У продукта может быть несколько цен, поэтому я использую CreateView. Это единственный способ получить part_id из URL-адреса (например, здесь )?

В forms.py:

class PPriceFormset(ModelForm):
    required_css_class = "required"
    
    class Meta:
        model = PPrice
        fields = ("price", "customer", "date", "part")

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_method = 'POST' 
        self.helper.layout = Layout(Row(Column('price'),
                                        Column('customer')),
                                    Submit('submit', 'Save price', css_class='btn-primary'),
                                    Field("date", type="hidden"),
                                    Field("part", type="hidden")) 

Я хочу добавить X сверху в скрытое поле «часть». В просмотре уже есть:

class PPrice(CreateView):
    model = PPrice
    template_name ="gap/pprice_update.html"
    form_class = PPriceFormset
    success_url = reverse_lazy('part-list')

    def get_form_kwargs(self, *args, **kwargs):
        kwargs = super(PPriceCreateView, self).get_form_kwargs(*args, **kwargs)
        kwargs['part_id'] = self.kwargs.get("part_pk")
        return kwargs

1 Ответ

0 голосов
/ 20 июля 2020

Решение было довольно простым, классу требовалось начальное значение, которое можно было передать форме через get_initial.

class PPriceCreateView(CreateView):
    model = PPrice
    template_name ="gap/pprice_update.html"
    form_class = PPriceFormset
    success_url = reverse_lazy('part-list')

    def get_initial(self):
        return {"part": self.kwargs["part_pk"]}
...