Models.UniqueConstraint не вызывает ошибку при отправке формы
Мне интересно, почему я не получаю ошибку при отправке формы, в которой я добавил UniqueConstraint на два поля вместе; данные не отправляются в базу данных (что ожидается из-за ограничения, которое я добавил в модель), и все, что происходит, это возвращение той же формы. Мне нужна какая-то индикация под полем Key Name, чтобы сказать что-то вроде "Key Name уже существует". Вот мой код:
В models.py
class Meta:
verbose_name = "Key Definition"
constraints = [
models.UniqueConstraint(fields=['key_name', 'developer_email'], name='unique key names for each user')
]
В forms.py
class KeyDefinitionForm (BSModalModelForm) :
## code I have not included goes here ##
def save(self):
log.debug("ENTER: forms.KeyDefinitionForm.save")
if self.request:
instance = super(CreateUpdateAjaxMixin, self).save()
log.debug("EXIT: forms.KeyDefinitionForm.save")
return instance
В views.py
class KeyDefinitionView (BSModalCreateView) :
"""Class based view for key definition loading form."""
model = KeyDefinition
form_class = KeyDefinitionForm
template_name = 'generate_keys/keydef_add_modal.html'
body_template_name = 'generate_keys/keydef_add_body.html'
def get(self, request):
log.debug("ENTER: views.KeyDefinitionView.get()")
form = self.form_class(
initial = {
'developer_email' : request.user.email,
'issue_date' : datetime.date.today(),
'HGE_TLS' : 'N',
}
)
data = {
'form' : form,
}
result = render(request, self.template_name, data)
log.debug("EXIT: views.KeyDefinitionView.get()")
return result
def post(self, request, *args, **kwargs) :
log.debug("ENTER: views.KeyDefinitionView.post()")
result = super().post(request, args, kwargs)
print(result)
log.debug("EXIT: views.KeyDefinitionView.post()")
return result
Вам нужно добавить следующий код либо в ваш базовый шаблон (если вы расширяете базовый шаблон для шаблона с вашей формой), либо в шаблон вашей формы. Этот код покажет вам любые сообщения о валидации, которые общее представление Django отправило при рендеринге шаблона.
Вам нужно добавить этот код поверх другого содержимого в вашем шаблоне, чтобы он отображал сообщения поверх содержимого вашей страницы. Этот тег будет загружаться только тогда, когда есть сообщение, переданное на front-end с HTTP-запросом
.
Template.py
{% for message in messages %}
<div class="alert {{ message.tags }} alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{{ message }}
</div>
{% endfor %}
Также добавьте этот код в свою форму для получения ошибок формы, которые не связаны ни с одним полем формы.
Template.py (шаблон формы)
<form method='post'>
{% csrf_token %}
{{ form.non_field_errors }}
.
.
</form>