NOT NULL约束失败错误

时间:2016-07-28 13:37:45

标签: django

我想选择一个活动并上传照片,但是当我进行迁移时,它会给出 NOT NULL约束失败:myapp_doc.event错误。

即使在删除视图后我也收到错误。我该怎么办?

模型

class Doc(models.Model):
    events = (
        (None, "choose one of it"),
        ('bbq', 'Barbeque '),
        ('meet', 'Meeting'),
    )
    doc = models.FileField(upload_to='uploads/')
    user = models.ForeignKey(User, null=False, blank=True)
    event = models.CharField(max_length=15, choices=events, null = True)
    def __unicode__(self):
        return unicode(self.user)

查看

def upload_file(request):
    user= request.user
    form = UploadFileForm(request.POST, request.FILES)
    if form.is_valid():
        doc = form.save(commit=False)
        doc.user = request.user
        doc.save()
        messages.success(request, 'Dosya Yuklendi')

    return HttpResponseRedirect('/uploadnew/')

return render(request, 'upload.html', {'form': form})


def upload_file(request):
    user= request.user
    form = UploadFileForm(request.POST, request.FILES)
    if form.is_valid():
        doc = form.save(commit=False)
        doc.user = request.user
        doc.save()
        messages.success(request, 'Dosya Yuklendi')

        return HttpResponseRedirect('/uploadnew/')

return render(request, 'upload.html', {'form': form})

1 个答案:

答案 0 :(得分:0)

好的,我遇到了你的问题。

在models.py中,您要为事件列定义 null = True 选项,该列的类型为 models.CharField

event = models.CharField(max_length=15, choices=events, null = True)

但事实上,'CharField' 中没有 null 选项。 只有'max_length'选项可用。

看到这个 - > https://docs.djangoproject.com/en/1.9/ref/models/fields/

从技术上讲,您需要删除 null = True 部分,如果您真的想要允许您的网络应用的用户为了能够自由选择任何选项,您可以在事件列中添加默认值,该列将从您在<中定义的选项中选择默认值strong>活动专栏。

请参阅官方文档中的示例。它和你想要的一样 - &gt; https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.Field.choices

如果你的默认值是Barbeque:

,那么你的事件列最终会看起来像这样
event = models.CharField(max_length=15, choices=events, default=bbq)

另外,正如官方文档中所示,我认为你不需要围绕'bbq'或'meet'的单引号。

我希望这能解决你的问题。