首页 > 解决方案 > 从 url 获取参数到表单的隐藏参数中

问题描述

我有一个 CreateView,我想在其中为产品创建新价格。产品详细信息页面有一个按钮来更改价格,这会导致一个新页面...\partprice\X,例如 X 是产品的 id。一个产品可以有多个价格,这就是我使用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

标签: djangodjango-formsdjango-views

解决方案


解决方案非常简单,该类需要一个初始值,可以通过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"]}

推荐阅读