Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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 IntegrityError-can';我想不出来_Python_Django_Django Forms_Django Views - Fatal编程技术网

Python Django IntegrityError-can';我想不出来

Python Django IntegrityError-can';我想不出来,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,当有有效提交时,我的程序会给出一个IntegrityError,也就是说,当(我认为)程序进入表单.is_valid()分支时。 有人知道是什么引起的吗 注:我将代码从no form using更改为form using,这就是错误开始的时候 我有以下看法 def new_category(request): if request.method == "POST": form = NewCategoryForm(request.POST) if form.is_valid():

当有有效提交时,我的程序会给出一个IntegrityError,也就是说,当(我认为)程序进入表单.is_valid()分支时。 有人知道是什么引起的吗

注:我将代码从no form using更改为form using,这就是错误开始的时候

我有以下看法

def new_category(request):
if request.method == "POST":
    form = NewCategoryForm(request.POST)
    if form.is_valid():
        cd = form.cleaned_data
        p = Category(name=cd["name"])
        p.save()
        return HttpResponseRedirect(reverse("objects:index"))
    else:
        return render(request,"objects/new_category.html",{"form":form})
else:
    form = NewCategoryForm()
    return render(request,"objects/new_category.html",{"form":form})
模型呢

class Category(models.Model):
    name = models.CharField("nome da categoria",max_length=100)

    def __unicode__(self):
        return self.name

    def sorted_events(self):
        return self.event_set.order_by("start")

class Event(models.Model):
    category = models.ForeignKey(Category)
    start = models.DateTimeField("horario", default=0)
形式呢

class NewCategoryForm(forms.Form):
    name = forms.CharField(max_length=10,
            error_messages=my_errors)

    def clean_name(self):
        if len(self.cleaned_data["name"]) < 3:
            raise forms.ValidationError("Nome demasiado curto!")
输出是这样的

<QueryDict: {u'csrfmiddlewaretoken': [u'ujlYhAFkFd7PuGJMk2aEmvWkDZmg4HlX'], u'name': [u'awdawdd']}>
True
{'name': None}
一点返工:

class NewCategoryForm(forms.ModelForm):

    class Meta:
        model = Category
        fields = ['name',]

    def validate_name(name):
        if len(name) < 3:
            raise forms.ValidationError("Nome demasiado curto!")
或者:

...
if form.is_valid():
    cat = form.save(commit=False)  # won't save to DB
    cat = do_stuff_with_cat
    cat.save()
    # to save another instance, one possibility is:
    cat.pk = None
    cat.save()
    return ...
else:
...

2件事:
Category
是如何定义的,stacktrace是什么?我已经编辑过了,现在你可以看到模型只需将
p=Category(name=cd[“name”])
更改为
p=Category.objects。创建(name=cd[“name”])
并删除
p.save()
为什么我不再需要保存对象了?它是否会保存在数据库中?是的。。create将其保存在db中供您使用没有这种返工的解决方案吗?如果没有,你能解释一下model=Category在元类中的角色吗?如果我想从一次提交中保存两个对象,该怎么办?使用模型时,ModelForm是常见的做法。它省去了重新定义字段的麻烦。事实上,该验证器可能应该在模型本身上定义,在这种情况下,表单将直接继承它。Meta类是配置ModelForm的一种方法——告诉它应该处理什么模型,告诉它应该在表单上显示什么字段,等等。在我接受ModelForm之前,有没有一种方法可以像我现在这样做?(为了让我明白这背后的原因)你能发布更详细的错误消息吗?这肯定是可能的。您可能缺少一个必需的模型字段,或者字段名称(“名称”)中有一些键入错误,或者类似的错误。该方法是有效的,因此它一定是一个有问题的细节。啊,clean_name()必须返回一个值!
AttributeError: 'NewCategoryForm' object has no attribute 'cleaned_data'
class NewCategoryForm(forms.ModelForm):

    class Meta:
        model = Category
        fields = ['name',]

    def validate_name(name):
        if len(name) < 3:
            raise forms.ValidationError("Nome demasiado curto!")
...
if form.is_valid():
    form.save()  # will save to DB
    return ...
else:
...
...
if form.is_valid():
    cat = form.save(commit=False)  # won't save to DB
    cat = do_stuff_with_cat
    cat.save()
    # to save another instance, one possibility is:
    cat.pk = None
    cat.save()
    return ...
else:
...