我有一个模型表单:
class UploadForm(forms.ModelForm):
class Meta:
model = Image
fields = ['image']
这是基于模型Image
class Image(models.Model):
def content_file_name(instance, filename):
return filename
name = models.CharField(max_length=50)
image = models.ImageField(upload_to=content_file_name)
user = models.ForeignKey(MyUser, related_name='image')
在views.py 中,我尝试将图像名称和用户对象(来自会话)与上传的图像一起保存到数据库中。
form1 = UploadForm(request.POST, request.FILES)
if form1.is_valid():
image = request.FILES['image'] # image is of UploadedFile class
form1.Meta.model.name = image.name
form1.Meta.model.user = get_object_or_404(MyUser,username=request.session['user'])
form1.save()
return render(request, '16_upload01.html', context)
问题是只有上传的图像被保存。浏览器中的错误消息:
/competition-big/big1/upload comp_app_image.user_id 处的 IntegrityError 可能不为 NULL
我通过检查 SQL 命令确认了这一点:
插入“comp_app_image”(“name”,“image”,“user_id”)值('','grey-160-100_1.png',无)
我认为图像名称和用户不受限制form1
。但我怎样才能做到这一点?
编辑
经过一番挖掘,我知道我搞砸了上面的代码。现在我将代码更改为:
if form1.is_valid():
form1.cleaned_data['user'] = get_object_or_404(MyUser, username=request.session['user'])
form1.save()
但我仍然得到null user_id
错误。
编辑2
谢谢杰辛达。现在我得到了这个更清晰的代码:
if form1.is_valid():
form1.cleaned_data['user'] = request.user
form1.save()
但错误null user_id
仍然存在。