【问题标题】:Django, handling multiple forms. Forms referenced before assignmentDjango,处理多种形式。分配前参考的表格
【发布时间】:2018-02-25 17:09:41
【问题描述】:

我认为有两种形式:BookingFormReviewForm。我想在我的template.html 中独立提交和处理这些表格。我在template.html的表单的名称标签中添加了'booking''review'

对于预订表格,我只想重定向,但对于 ReviewForm,我想在我的数据库中创建一条记录。

这是我的 views.py

if request.method == "POST":
    if 'booking' in request.POST:
        form = BookingForm(request.POST)
        if form.is_valid():
            #process the form
            return redirect()
    elif 'review' in request.POST:
        review_form = BookingForm(request.POST)
        if review_form.is_valid():
            review_form.save()
            return redirect()
else:
    form = BookingForm()
    review_form = ReviewForm()
return render(request, "template.html", context={"form": form,"review_form":review_form})

但是,由于某种原因,我得到了 formreview_form 在分配之前被引用的错误。


另一件事,因为评论模型必须与另一个模型相关联(称为项目)。我想在致电review_form.save() 时自动获取商品数据并将我的评论与商品相关联。 我正在考虑类似于review_form['item']=kwargs['pk'] 的东西(不确定这是否可行)。我正在使用 DetailView 结构,并且页面具有来自 urls.py 的参数,与项目相关联,在我的视图中存储为 item_id=kwargs['pk']

class Review(models.Model):
    #other fields
    item = models.ForeignKey(Item)

class ReviewForm(forms.ModelForm):
    class Meta:
        model = Review
        fields = ('title','star','photo','name','email','body')

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    首先,向表单添加name 属性没有任何作用。该值仍然不会发送到视图。因此,您的条件在 POST 上都不成立,并且 form 和 booking_form 都未定义。

    这样做的方法是将属性添加到提交按钮。

    但是,这仍然会留下一个问题,如果 POST 包含其中一个值但该表单无效,则另一个表单仍然未定义。无论发布数据中包含什么内容,您都应确保两者都已定义。

    【讨论】:

    • 谢谢,抱歉,我确实为提交按钮添加了名称标签。我是否需要 2 个单独的 if 'booking' in 和 if 'review' in statements,或者是否有可能有 1 个循环。另外,您能否建议如何处理我在下一部分中谈到的 .save()。我的想法会奏效吗?
    • 我只是觉得代码中有太多难以阅读的 if 和 else 语句
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    相关资源
    最近更新 更多