【问题标题】:Django inline formset validationDjango 内联表单集验证
【发布时间】:2018-08-08 11:10:15
【问题描述】:

我有以下型号:

class CaseForm(ModelForm):
    class Meta:
        model = Case
        fields = '__all__'


class ClientForm(ModelForm):

    class Meta:
         model = Client
         fields = '_all__'

CaseClientFormset = inlineformset_factory(Case, Client, form=ClientForm,
                                      extra=0, max_num=2, min_num=1,
                                      validate_max=True,
                                      validate_min=True)

当我填写表格(caseform)的顶部时,它会正确保存。当我填写caseform和clientform时,它会正确保存。

如果我填写了caseform但部分填写了clientform,则似乎不会进行任何验证,并且会保存一个案例,并且客户信息会丢失并且永远不会保存。

class CaseCreateView(LoginRequiredMixin, AdviserExistenceMixin,
                 CreateView):
    model = Case
    form_class = CaseForm

    def form_valid(self, form):
        context = self.get_context_data()
        clients = context['clients']
        self.object = form.save()

        if clients.is_valid():
            clients.instance = self.object
            clients.save()
        return super(CaseCreateView, self).form_valid(form)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        if self.request.POST:
            context['clients'] = CaseClientFormset(self.request.POST)
        else:
            context['clients'] = CaseClientFormset()

        context['navbar'] = str(self.model.__name__).lower()
        return context

我遇到的另一个问题是,尽管指定了 min_num=1 和 validate_min=True,但我似乎能够在不填写客户表单的情况下保存案例。

任何帮助将不胜感激。

【问题讨论】:

    标签: django formset


    【解决方案1】:

    修复了将 def form_valid 替换为:

    def form_valid(self, form):
        context = self.get_context_data()
        clients = context['clients']
    
        if clients.is_valid():
            self.object = form.save()
            clients.instance = self.object
            clients.save()
            return super(CaseUpdateView, self).form_valid(form)
        else:
            return super(CaseUpdateView, self).form_invalid(form)
    

    【讨论】:

    • 我可以确认return super(CaseUpdateView, self).form_valid(form) 是否正确吗?我不明白你为什么需要CaseUpdateView 而它是CaseCreateView
    猜你喜欢
    • 2016-03-15
    • 1970-01-01
    • 2011-09-17
    • 2013-09-03
    • 2023-04-09
    • 2011-06-02
    • 2010-10-27
    • 2013-11-15
    • 2014-08-17
    相关资源
    最近更新 更多