CBV中的表单集验证

2024-04-23 22:20:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用表单集的订单,因为我希望用户动态地添加更多的产品及其数量。 用户输入订单的名称,并验证其不为空。 如何验证表单集本身?检查产品/数量是否为空

在视图.py在

class OrderCreateView(CreateView):
    model = Order
    template_name = "orderform.html"
    fields = ['name', ]  
    def get_context_data(self, **kwargs):
        data = super(OrderCreateView, self).get_context_data(**kwargs)
        if self.request.POST:
            data['productmetas'] = InlineOrderFormSet(self.request.POST)
        return data

    def form_valid(self, form):
        context = self.get_context_data()
        productmetas = context['productmetas']
        self.object = form.save(commit=False)
        self.object.save()
        if productmetas.is_valid():
            productmetas.instance = self.object
            productmetas.save()

    return super(OrderCreateView, self).form_valid(form)

在模型.py在

^{pr2}$

在表单.py在

InlineOrderFormSet = inlineformset_factory(Order, ProductMeta,
                                            form=OrderAutoCompleteForm,
                                            extra=1)

Tags: 用户py订单selfform表单dataget
1条回答
网友
1楼 · 发布于 2024-04-23 22:20:30

对上述问题的有效解决方案感兴趣的人 改编自@neverwaltoner的答案

def form_valid(self, form):
    context = self.get_context_data()
    productmetas = context['productmetas']
    with transaction.atomic():
        self.object = form.save()
    if form.is_valid():
        if productmetas.is_valid():
            productmetas.instance = self.object
            productmetas.save()
        else:
            return super(OrderCreateView, self).form_invalid(form)

    return super(OrderCreateView, self).form_valid(form)

相关问题 更多 >