Python 字段';id';期望一个数字,但得到<;上市:Ps4 Pro>;

Python 字段';id';期望一个数字,但得到<;上市:Ps4 Pro>;,python,django,django-models,Python,Django,Django Models,这是我第一次用模型创建Django网站,在我第一次尝试将数据插入表时,我遇到了这个错误 我的模型如下: 类用户(抽象用户): 通过 #https://docs.djangoproject.com/en/3.1/topics/auth/default/ 类列表(models.Model): listingID=models.AutoField(auto_created=True,primary_key=True,serialize=False,verbose_name=“listID”) 创建人=

这是我第一次用模型创建Django网站,在我第一次尝试将数据插入表时,我遇到了这个错误

我的模型如下:

类用户(抽象用户):
通过
#https://docs.djangoproject.com/en/3.1/topics/auth/default/
类列表(models.Model):
listingID=models.AutoField(auto_created=True,primary_key=True,serialize=False,verbose_name=“listID”)
创建人=models.ForeignKey(用户,在删除时=models.SET\u NULL,相关的\u name=“myListing”,NULL=True)
watchers=models.ManyToManyField(用户,空白=True,相关的_name=“watchlist”)
title=models.CharField(最大长度=30)
description=models.TextField()
创建日期=models.DateField(auto\u now=True)
img_url=models.URLField()
active=models.BooleanField(默认值=True)
定义(自我):
返回f“{self.title}”
类别投标(型号.型号):
listing=models.ForeignKey(listing,on_delete=models.SET_NULL,related_name=“bidsMadeOnMe”,NULL=True,blank=True)
user=models.ForeignKey(user,on_delete=models.SET_NULL,related_name=“myBids”,NULL=True)
price=models.FloatField()
创建日期=models.DateField(auto\u now=True,null=True)
定义(自我):
返回f“Bid={self.price}”
处理表单提交的视图如下所示:

@需要登录\u
def创建_列表(请求):
如果request.method==“POST”:
user=user.objects.get(username=request.user.username)
l=列表(由用户创建),
title=request.POST[“title”],
description=request.POST[“desc”],
# https://stackoverflow.com/questions/12176585/handling-dates-over-request-get
创建日期=models.datetime字段(自动现在添加=True),
img\u url=request.POST[“image\u url”]
)
l、 保存()
b=投标书(l,
用户,
请求后[“初始投标”],
models.datetime字段(自动\u now\u add=True)
)
b、 保存()
返回渲染(请求“auctions/index.html”)
我知道问题在于我添加数据的方式,但我无法修复它。有人能给我点灯吗?

你的问题(实际上有几个)是:

您正在通过位置参数而不是关键字参数构造模型实例。这是可以做到的,但是添加到投标模型中的不可见“id”列是第一个参数

在Django中,我们从不这样构造模型,但总是使用关键字参数,因此我们不依赖于字段顺序:

b=Bid(listing=l,user=user,…)
一旦解决了这个问题,下一个问题就是日期字段

不要将字段指定给模型实例。字段是类声明,它们不属于实例。字段描述类(=模型)上的数据类型。在实例上,指定该数据

在这种情况下,您在模型和实例上对字段的定义是错误的,您甚至不应该分配它-它将自动填充


总的来说,感觉好像你还没有经历或没有完全理解这些概念。我建议你仔细检查一下。

user=user.objects.get(username=request.user.username)
这段代码会不断出现,而且不会消失!你已经有一个用户在request.user中,所以不要再从数据库中获取它。是的,我在其他地方找到了它。下次我会更有耐心,认真阅读文档。再次感谢!哇,非常感谢你,我以为问题是在创建一个列表实例时发生的,但实际上是为了出价。事情现在越来越清楚了!
b = Bid(l, user, request.POST["initial_bid"], models.DateTimeField(auto_now_add=True))