gpt4 book ai didi

Django 完整性错误; NOT NULL 约束失败

转载 作者:行者123 更新时间:2023-12-03 10:08:54 24 4
gpt4 key购买 nike

我正在尝试保存模型实例,但无济于事。

下面是我的模型;

class AudioFile(models.Model):
name = models.CharField(max_length=100,default='')
audio_file = models.FileField()
uploader = models.ForeignKey(User,default='')

def __unicode__(self):
return self.name

我有下面的表格;

class AudioFileForm(forms.ModelForm):
class Meta:
model = AudioFile
fields = ['name', 'audio_file']

def clean_audio_file(self):
audio = self.cleaned_data['audio_file']
if audio:
if audio._size > 5*1024*1024:
raise ValidationError("File too large ( > 5mb )")
if os.path.splitext(audio.name)[1] != ".mp3":
raise ValidationError("We only support mp3!")
return audio
else:
raise validationError("Couldn't read uploaded file")

我有以下 View 来处理提交的表单;

form = AudioFileForm(request.POST, request.FILES)
if form.is_valid():
form.cleaned_data['uploader'] = request.user //view requires login
form.save()
return HttpResponseRedirect(
reverse('home_audio',kwargs={'pk':audio_file.pk})
)
else:
return HttpResponse(form.errors)

但是在提交时我得到了错误; /uploadaudio 处的 IntegrityError
NOT NULL 约束失败:stationrunner_audiofile.uploader_id
/uploadaudio 是与 View 对应的 URL,stationrunner 是我的应用名称。

有人请帮忙。

最佳答案

尝试改变 View :

form = AudioFileForm(request.POST, request.FILES)
if form.is_valid():
audio_file = form.save(commit=False) // This will not hit the database, and no IntegrityError will be raised
audio_file.uploader = request.user // Tack on the user,
audio_file.save()
return HttpResponseRedirect(
reverse_lazy('home_audio',kwargs={'pk':audio_file.pk}) // Use reverse lazy to prevent circular import issues.
)
else:
return HttpResponse(form.errors)

您还可以修复模型的一些问题:

from django.conf import settings
from django.db import models

class AudioFile(models.Model):
name = models.CharField(max_length=100) // If the field is not allowed to be blank, the default blank does not make sense.
audio_file = models.FileField(upload_to="audio_files") // Without this parameter file field does not work.
uploader = models.ForeignKey(settings.AUTH_USER_MODEL) // This should reference the user model declared in your settings file.

def __unicode__(self):
return self.name

关于Django 完整性错误; NOT NULL 约束失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30342953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com