如何在具有多个对象的表单中使用初始值而不出现 MultipleObjectsReturned 错误
How to use initial in a form with multiple objects without getting MultipleObjectsReturned Error
为什么表单向我抛出 MultipleObjectsReturned 异常,当试图让用户编辑他们的个人资料封面时,我有一个帐户模型,我还创建了一个单独的模型来保存用户个人资料封面图像的上传,因为用户可以上传多个个人资料封面图片。但不知何故,当上传的封面图片不止一张时,我碰巧遇到了这个错误(get() 返回了不止一个 AccountCover -- 它返回了 2 个!)。
cover = get_object_or_404(AccountCover, account=account.id).first()
if request.user:
forms = CoverImageForm(request.POST, request.FILES,instance=cover,
initial = {
'cover_image':cover.cover_image.url,
})
if forms.is_valid():
data = forms.save(commit=False)
data.account = cover.account
data.save()
else:
forms = CoverImageForm(
initial = {
'cover_image':cover.cover_image,
}
)
这是我的封面图片模型。
class AccountCover(models.Model):
account = models.ForeignKey(Account,on_delete=models.CASCADE)
cover_image = models.ImageField(upload_to=get_cover_image_path,blank=True, null=True)
封面图片的表格
class CoverImageForm(forms.ModelForm):
class Meta:
model = AccountCover
fields = ['cover_image']
我认为 get_object_or_404
只需要 return 一个对象。尝试使用:
from django.http import Http404
cover = AccountCover.objects.filter(account=account.id).first()
if not cover:
raise Http404()
为什么表单向我抛出 MultipleObjectsReturned 异常,当试图让用户编辑他们的个人资料封面时,我有一个帐户模型,我还创建了一个单独的模型来保存用户个人资料封面图像的上传,因为用户可以上传多个个人资料封面图片。但不知何故,当上传的封面图片不止一张时,我碰巧遇到了这个错误(get() 返回了不止一个 AccountCover -- 它返回了 2 个!)。
cover = get_object_or_404(AccountCover, account=account.id).first()
if request.user:
forms = CoverImageForm(request.POST, request.FILES,instance=cover,
initial = {
'cover_image':cover.cover_image.url,
})
if forms.is_valid():
data = forms.save(commit=False)
data.account = cover.account
data.save()
else:
forms = CoverImageForm(
initial = {
'cover_image':cover.cover_image,
}
)
这是我的封面图片模型。
class AccountCover(models.Model):
account = models.ForeignKey(Account,on_delete=models.CASCADE)
cover_image = models.ImageField(upload_to=get_cover_image_path,blank=True, null=True)
封面图片的表格
class CoverImageForm(forms.ModelForm):
class Meta:
model = AccountCover
fields = ['cover_image']
我认为 get_object_or_404
只需要 return 一个对象。尝试使用:
from django.http import Http404
cover = AccountCover.objects.filter(account=account.id).first()
if not cover:
raise Http404()