Django:无法保存模型 - 错误:"id"期望一个数字,但得到了<django.db.models.fields.related.ForeignKey...>



我真的想不出办法了,我什么都试过了。基本上,我只是想保存一些项目,而owner是一个外键相关的默认DjangoUser模型。同样的方法也适用于其他视图和模型,其中关联是相同的。但是这里我得到了这个错误:

Exception Type:     TypeError
Exception Value:    
Field 'id' expected a number but got <django.db.models.fields.related.ForeignKey: owner>.

这是我的模型:

class User(AbstractUser):
pass
""" ... """
class Item(TimeStampMixin):
title = models.CharField(max_length=40)
owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name="Items")
last_bidder = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="bidded_objects", default=owner)
etc=etc...

这是我的观点:

class Form_New_Item(ModelForm):
class Meta:
model = Item
fields = ['title', 'description', 'price', 'category', 'image_url']
def create_new_item(request):
if request.user.is_authenticated and request.method == "POST":
form = Form_New_Item(request.POST)
user = request.user
if form.is_valid():
new_item = Item(
owner=user,
title=form.cleaned_data['title'],
etc=etc...,
)
new_item.save()
return HttpResponseRedirect(reverse("index"))

注意,当我调用new_item.save()时,错误发生了:

事先感谢您对我的帮助。

我刚刚解决了这个问题,我应该在示例中提供整个Item类,对不起(我只是编辑第一条消息),现在我更清楚地看到错误所在:

类的一个属性依赖于另一个属性

owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name="listings")
last_bidder = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="bidded_objects", default=owner)

因此,您看到第二个属性last_bidder默认为第一个属性owner

尽管Django报告的错误似乎是关于owner属性的,但问题是在last_bidder属性上。

我通过设置null=True来解决这个问题,而不是默认的第一个属性:

last_bidder = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="bidded_objects", null=True)

最新更新