我真的想不出办法了,我什么都试过了。基本上,我只是想保存一些项目,而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)