如何从同一页面上的两种不同形式接收数据

时间:2019-02-16 11:48:49

标签: django django-forms

我正在尝试在一页上获得两种形式。一个主持人/审阅案件(主持人)和给案件添加书签(普通用户)。当前设置的方式是,两个提交按钮都在“书签”表单上起作用。也就是说,当我“审核”一个案例时,它会为该案例创建一个书签,并且不会更改审核状态或评论。

在models.py中,“案例”是具有各种属性的模型,包括“状态”和“ moderator_comments”。 “书签”是一个以“用户”和“案例”为外键的模型。

在forms.py中;它们都是只是带有'model ='和'fields ='的普通ModelForms。

我尝试将各种属性(如“名称”,“值”,“动作”等)添加到两个表单和提交按钮中,但是它没有解决任何问题。

我认为逻辑混乱,因为在已经为该用户添加了书签的情况下,“书签”表单被设置为不在DOM中显示(通过{%if not bookmark%})。在审查案例创建另一个书签的情况下,问题仍然存在(即使在这种情况下,书签表单不在DOM中。

def case_detail(request, case_id):
    if request.method == 'GET':
        case = Case.objects.get(id=case_id)
        media = Media.objects.filter(case_id=case_id)
        moderator_form = ModerateCaseForm(instance = case, prefix="moderate")
        bookmark_form = BookmarkCaseForm(prefix="bookmark")
        bookmark = Bookmark.objects.filter(user=request.user, bookmarked_case=case)
    elif request.method == 'POST':
        case = Case.objects.get(id=case_id)
        moderator_form = ModerateCaseForm(request.POST, instance=case)
        bookmark_form = BookmarkCaseForm(request.POST)
        if moderator_form.is_valid():
            instance = moderator_form.save(commit=False)
            instance.id = case_id
            instance.save()
            messages.success(request, 'Case review comments added.')
            return redirect(f'/data/case/{instance.id}')
        if bookmark_form.is_valid():
            bookmark = bookmark_form.save(commit=False)
            bookmark.bookmarked_case = case
            bookmark.user = request.user
            bookmark.save()
            messages.success(request, 'Case bookmarked.')
            return redirect(f'/data/case/{case_id}')
    return render(request, 'catalogue/case_detail.html', {'case': case, 'media':media, 'moderator_form':moderator_form, 'bookmark_form':bookmark_form, 'bookmark':bookmark})

模板中的两种形式是:

<form  method="POST" enctype="multipart/form-data">
  {% csrf_token %}
  <fieldset class="form-group to-hide">{{ bookmark_form|crispy }} . 
  </fieldset>
  <div class="form-group">
    <button type="submit" value="bookmark" name="bookmark" rel="tooltip" class="btn btn-primary" data-original-title="" title="">
      <a href="{% url 'case-delete' case.id %}">
        <i class="material-icons">bookmark</i>
      </a>
    </button>
  </div>
</form>

<form action="{% url 'case-detail' case.id %}" method="POST" enctype="multipart/form-data">
  {% csrf_token %}
  <fieldset class="form-group">
    <legend class="mb-4">Moderate Case</legend>
    {{ moderator_form|crispy }}
  </fieldset>
  <div class="form-group">
    <button class="btn btn-info" value="moderate" name="moderate" type="submit">Submit</button>
  </div>
</form>

0 个答案:

没有答案