【发布时间】:2021-11-14 01:56:44
【问题描述】:
我尝试添加一个验证状态,例如“这已经存在”。 (如注册表,见图)就在我的表单输入下方。
但是当我提交我的表单时,我遇到了这个错误“唯一约束失败”
这是我的代码
型号
class Company(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
siret = models.CharField(max_length=50, unique=True)
表格
class CheckoutForm(forms.Form):
siret = forms.CharField(required=True, widget=forms.TextInput(attrs={'placeholder': 'Ton SIRET'}))
class Meta:
model = Company
fields = ('siret')
def clean(self):
siret = cleaned_data.get('siret')
if siret:
raise forms.ValidationError("This siret exist.")
else:
return siret
查看
def post(self, request, *args, **kwargs):
form = CheckoutForm(self.request.POST)
if form.is_valid():
siret = form.cleaned_data.get('siret')
company = Company(
user = self.request.user,
siret = siret,
)
company.save()
context = {
'company': company,
}
return redirect("core:payment")
else:
messages.info(self.request, "Please fill in the shipping form properly")
return redirect("core:checkout")
模板
{% load crispy_forms_tags %}
<main>
<div class="container wow fadeIn">
<h2 class="my-5 h2 text-left">Checkout form</h2>
<div class="row">
<div class="col-md-8 mb-4">
<div class="card">
<form method="post" class="card-body">
{% csrf_token %}
{{ form|crispy }}
<button class="btn btn-primary" id="checkout-button" data-secret="{{ session_id }}">
Checkout
</button>
</form>
</div>
</div>
非常感谢
【问题讨论】:
-
会不会是因为一个已经存在的对象而无法
save对象,这会引发 UNIQUE 约束字段 -
是的,但是如果我的数据库中已经存在一个,我想重定向到相同的表单,并在输入下方像图片一样显示红色消息错误,例如“此 Siret 已存在”。
-
所以你必须在你的视图中调用 clean 类,或者
clean(self)在什么时候触发? -
是的,但我不知道该怎么做我尝试但它不起作用..
-
视图中的
siret.clean()是否有效? (不确定很抱歉,试图提供帮助,但我自己从来没有建立过什么)
标签: django forms unique-constraint django-crispy-forms cleaned-data