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