Django def form_valid有两种形式 [英] Django def form_valid with two forms

查看:56
本文介绍了Django def form_valid有两种形式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在相同的视图中使用两种形式.这是受限制的频道.第一种形式是聊天,第二种形式发起对话(默认为布尔值的布尔值=假).所有表格共享相同的成功网址.

I'd like to use two forms into the same views. It is a restricted channel. The first forms is a chat and the second one launch the conversation (boolean fiels with default = false). All forms share the same success url.

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

Do you have any ideas? I'm beginning with Django :) Thanks for your help

这是我的观点:

@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})
    ...

推荐答案

您可以通过添加名称来标识已提交表单的提交"按钮来实现.

You can do it by adding a name to identify the submit button of the form submitted.

因此您的标记看起来与以下内容类似

So your markup would look something along the lines of;


<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 方法提交的表单;

Then you can figure out which form was submitted in the post method;


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

这篇关于Django def form_valid有两种形式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆