如果特定用户两次使用相同的名称并通知用户,Django Form将拒绝输入



在Django中,我有一个自定义表单,它创建一个;电子邮件组";在模态中。电子邮件组模型包含许多属性,包括电子邮件组、用户等的唯一ID。

这个想法是,特定用户不应该两次输入相同的名称,如果他们输入了,应该通知他们。

现在看来,表单拒绝了重复email_name的输入(它不会添加到数据库中(,但它返回的消息是"添加了新电子邮件"。

我也一直试图让电子邮件在模态中显示,但这是另一个问题。

表格

class EmailCreateForm(ModelForm):
class Meta:
model = UserEmail
fields = ['email_name']
constraints = [
models.UniqueConstraint(fields=['user_id', 'email_name'], name='unique_name')
]
def __init__(self, *args, **kwargs):
super(EmailCreateForm, self).__init__(*args, **kwargs)  # Call to ModelForm constructor
self.fields['email_name'].widget.attrs['rows'] = 1

views.py

def email(request):
if request.method == 'POST':
form = EmailCreateForm(request.POST, instance=request.user)

if form.is_valid():
form.save()
messages.success(request, f'New Email Added')
return redirect('project-emails')
else:
messages.error(request, f'Email not Added')
return redirect('project-emails')

else:
form = EmailCreateForm()
return render(request, 'project/emails.html', {'form': form})

模板emails.html 的一部分

{% if messages %}
{% for message in messages %}
<div class="alert id = 'email-message'">
{{ message|escape }}
</div>
{% endfor %}
{% endif %}

根据Django文档:

此模块中定义的类创建数据库约束。它们被添加到模型Meta.constraints选项中。

因此,这应该添加到模型类中,而不是表单中。

因此,您的form.is_valid()将返回true,并显示成功消息。如果在模型类上设置了唯一约束,则应在以下两个步骤中在ModelForm实例中检查这些约束:验证表单时和保存到DB时。

最新更新