【问题标题】:Django def form_valid with two formsDjango def form_valid 有两种形式
【发布时间】:2020-09-17 19:05:18
【问题描述】:

我想在同一个视图中使用两种形式。这是一个受限渠道。第一种形式是聊天,第二种形式启动对话(布尔字段,默认值 = false)。所有表单共享相同的成功 url。

你有什么想法吗?我从 Django 开始 :) 感谢您的帮助

这是我的看法:

@method_decorator(login_required(login_url='/cooker/login'),name="dispatch")
class CheckoutDetail(generic.DetailView, FormMixin):
    model = Sugargroup
    context_object_name = 'sugargroup'
    template_name = 'checkout_detail.html'
    form_class = CreateSugarChatForm
    validation_form_class = LaunchSugargroupForm # that is what I would like to add (models: boolean field with false default = user activate channel in changing it by true thanks to the forms
    
    def get_context_data(self, **kwargs):
        context = super(CheckoutDetail, self).get_context_data(**kwargs)
        context['form'] = self.get_form()
        return context

    def form_valid(self, form):
        if form.is_valid():
            form.instance.sugargroup = self.object
            form.instance.user = self.request.user
            form.save()
            return super(CheckoutDetail, self).form_valid(form)
        else:
            return super(CheckoutDetail, self).form_invalid(form)
     
    ### I don't know how I can implement this into: def form_valid
    def form_valid(self, validation_form):
        validation_form.instance.user = self.request.user
        validation_form.save()
        return super(CheckoutDetail, self).form_valid(validation_form)
   ######        

    def post(self,*args,**kwargs):
        self.object = self.get_object()
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_valid(form)

    def get_success_url(self):
        return reverse('checkout:checkout_detail',kwargs={"slug":self.object.slug})
    ...

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    您可以通过添加一个名称来标识提交的表单的提交按钮。

    所以你的标记看起来像;

    
    <form action="" method="post">
        {{ form_1 }}
        <input type="submit" name="form_1" value="Submit" />
    </form>
    
    <form action="" method="post">
        {{ form_2 }}
        <input type="submit" name="form_2" value="Submit" />
    </form>
    

    然后就可以判断post方法中提交了哪个表单;

    
        def post(self, *args, **kwargs):
            
            if 'form_1' in request.POST:
                process_form_1()
            elif 'form_2' in request.POST:
                process_form_2()
    

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 2019-08-29
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      相关资源
      最近更新 更多