Python 为什么我的Django模型没有';是否为唯一约束引发验证错误?
我已经读到ModelForm的clean()方法验证了我的模型上的unique_-together约束,如果没有验证,则会引发ValidationError。但是,我的模型表单不这样做。至少它没有在表单中给出错误消息,相反,我得到了Django错误和回溯: 无法在/处创建ValueError,因为数据未验证 这并不是因为我排除了unique_together约束的一个字段。表单的其他验证工作时,会在表单上显示错误消息。请帮忙,谢谢 我使用Django 1.10,Python是3.5 我在models.py中创建了以下模型:Python 为什么我的Django模型没有';是否为唯一约束引发验证错误?,python,django,validation,django-forms,django-templates,Python,Django,Validation,Django Forms,Django Templates,我已经读到ModelForm的clean()方法验证了我的模型上的unique_-together约束,如果没有验证,则会引发ValidationError。但是,我的模型表单不这样做。至少它没有在表单中给出错误消息,相反,我得到了Django错误和回溯: 无法在/处创建ValueError,因为数据未验证 这并不是因为我排除了unique_together约束的一个字段。表单的其他验证工作时,会在表单上显示错误消息。请帮忙,谢谢 我使用Django 1.10,Python是3.5 我在mode
from django.db import models
class FoglalkozasTipus(models.Model):
foglalkozas_tipusa = models.CharField(max_length=255, unique=True)
def __str__(self):
return '%s' % (self.foglalkozas_tipusa)
class Foglalkozas(models.Model):
kezdet = models.DateTimeField()
veg = models.DateTimeField()
foglalkozas_tipusa = models.ForeignKey(FoglalkozasTipus,
on_delete=models.CASCADE)
class Meta:
unique_together = (("kezdet", "veg"),)
ordering = ['kezdet', 'veg']
def __str__(self):
return '%s-%s %s' % (self.kezdet.strftime("%Y.%m.%d %H:%M"),
self.veg.strftime("%H:%M"), self.foglalkozas_tipusa)
class Jelentkezes(models.Model):
foglalkozas = models.ForeignKey(Foglalkozas, on_delete=models.CASCADE)
email = models.EmailField()
vezeteknev = models.CharField(max_length=255)
keresztnev = models.CharField(max_length=255)
class Meta:
unique_together = (("foglalkozas", "email"),)
def __str__(self):
return '%s: %s %s (%s)' % (self.foglalkozas, self.vezeteknev,
self.keresztnev, self.email)
对于Jelentkezes模型,我在forms.py中创建了一个ModelForm:
from django.utils import timezone
from django.forms import ModelForm, RadioSelect
from .models import Jelentkezes, Foglalkozas
class JelentkezesForm(ModelForm):
class Meta:
model = Jelentkezes
fields = ['foglalkozas', 'email', 'vezeteknev', 'keresztnev']
widgets = {
'foglalkozas': RadioSelect,
}
def __init__(self, *args, **kwargs):
super(JelentkezesForm, self).__init__(*args, **kwargs)
self.fields['foglalkozas'].queryset =
Foglalkozas.objects.filter(kezdet__gt=timezone.now())
self.fields['foglalkozas'].empty_label = None
在views.py中,我使用以下模型形式:
from django.shortcuts import render
from django.http import HttpResponseRedirect
from .forms import JelentkezesForm
def index(request):
if request.method == 'POST':
form = JelentkezesForm(request.POST)
form.save()
return HttpResponseRedirect('koszonet/')
else:
form = JelentkezesForm()
return render(request, 'aviva/index.html', {'form': form})
在index.html中,表单如下所示(我使用W3.CSS框架和django小部件进行样式调整):
{%load widget\u tweaks%}
{%csrf_令牌%}
{{form.non_field_errors}}
{{form.foglalkozas.errors}
{{form.foglalkozas.label}}:
{%用于格式为.foglalkozas%的收音机]
{{radio}}
{%endfor%}
{{form.email.errors}
{{form.email.label}}:
{form.email | add_类:“w3输入w3边框w3轮”}
{{form.vezeteknov.errors}
{{form.vezeteknov.label}}:
{form.vezeteknov | add_类:“w3输入w3边框w3轮”}
{{form.keresztnev.errors}
{{form.keresztnov.label}}:
{form.keresztnov | add|u类:“w3输入w3边框w3轮”}
Űrlapadatok törlése
您从不在表单上调用验证。应该是:
if request.method == 'POST':
form = JelentkezesForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('koszonet/')
也可能是其他验证错误。为什么不发布完整的stacktracethan呢?谢谢,这很有效!不知何故,我误解了一些事情,我认为这是没有必要的。
if request.method == 'POST':
form = JelentkezesForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('koszonet/')