Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的Django模型没有';是否为唯一约束引发验证错误?_Python_Django_Validation_Django Forms_Django Templates - Fatal编程技术网

Python 为什么我的Django模型没有';是否为唯一约束引发验证错误?

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

我已经读到ModelForm的clean()方法验证了我的模型上的unique_-together约束,如果没有验证,则会引发ValidationError。但是,我的模型表单不这样做。至少它没有在表单中给出错误消息,相反,我得到了Django错误和回溯:

无法在/处创建ValueError,因为数据未验证

这并不是因为我排除了unique_together约束的一个字段。表单的其他验证工作时,会在表单上显示错误消息。请帮忙,谢谢

我使用Django 1.10,Python是3.5

我在models.py中创建了以下模型:

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/')