第一个错误:我要检查group_name字段值在模型形式中是否唯一 我尝试了这段代码,但似乎无法正常工作,好像我在此字段中输入了新值一样,没有消息,但数据未添加到表中
第二个错误:我没有任何消息。也许我不应该重定向页面?
我在views.py中的代码:
def group_create(request):
group_form = GroupForm()
if request.method == "POST":
group_form = GroupForm(request.POST)
if group_form.is_valid():
group_name = group_form.cleaned_data.get('group_name')
if Group.objects.filter(group_name=group_name).exists:
messages.error(request, 'this group already exists')
else:
group_form.save()
messages.success(request, 'Group created')
return redirect('group_list')
return render(request, 'imports/group_create.html', {
"group_form": group_form,
})
我的模特:
class Group(models.Model):
group_id = models.AutoField(primary_key=True)
groupParent_id = models.ForeignKey('self', blank=True, null=True, related_name='Parent', on_delete=models.CASCADE)
group_name = models.CharField(max_length=100, null=False, blank=False, unique=True)
我的html:
<div class="container-fluid">
<!-- Code pour message type toaster -->
{% if messages %}
<div class="row">
<div class="col-xs-12">
<ul class="alert" role="alert">
{% for message in messages %}
<p {% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</p>
{% endfor %}
</ul>
</div>
</div>
{% endif %}
<!-- fin messages -->
<div class="row">
<div class="col-lg-2 col-md-2 col-sm-2 sidebar">
{% block sidebar %}{% endblock %}
</div>
<div class="col-lg-10 col-lg-offset-2 col-md-10 col-md-offset-2 col-sm-10 col-sm-offset-2 content">
{% block heading %}{% endblock %}
{% block page %}{% endblock %}
</div>
</div>
</div>
答案 0 :(得分:0)
Django的ModelForm
[Django-doc]已经验证了标记为unique=True
[Django-doc]的字段的唯一性,正如documentation on Interaction with model validation [Django-doc]中指定的那样:
(...)
在任何唯一性之前,模型的
clean()
方法将被称为 进行检查。 (...)。
如果该字段无效,则它将错误添加到group_form.errors
[Django-doc]中。之所以看不到它们,是因为无论表单是否有效,您都只能重定向到视图,从而丢弃该表单。
如果您相应地呈现表单,它将向带有错误的字段中添加额外的消息:
def group_create(request):
if request.method == "POST":
group_form = GroupForm(request.POST)
if group_form.is_valid():
group_form.save()
messages.success(request, 'Group created')
# only in case of success
return redirect('group_list')
else:
group_form = GroupForm()
return render(request, 'imports/group_create.html', {
"group_form": group_form,
})