我在使用Django ManyToManyField时遇到一个错误



在view.py 中

def watchlist(request, item_id):
list=get_object_or_404(Listing, id=item_id)
wc=WatchCount(user=request.user)
if WatchCount.objects.filter(user=request.user, listing=list).exists():
wc.listing.remove(list)
else:
wc.listing.add(list)     
return HttpResponseRedirect(wc.get_absolute_url())

在模型中.py

class WatchCount(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
listing =  models.ManyToManyField(Listing, blank=True, related_name="watchcount")
def __str__(self):
return f"{self.user.username}"
def count(self):
return self.listing.count()
def get_absolute_url(self):
return reverse('list', kwargs={'item_id': self.pk})

错误:

"lt;WatchCount:jeelen>quot;需要具有字段"的值;id";在可以使用这种多对多关系之前。

在添加或删除ManyToMany字段之前,需要创建对象
当您还没有创建对象时,您不能添加或删除ManyToMany字段,因为它没有id,也没有保存在数据库中
当一个对象保存在数据库中时,数据库将自动为其设置一个id
因此,在您的情况下,wc=WatchCount(user=request.user)是在django代码中创建的,但它没有保存到数据库中,因此没有id。
wc.save()将向数据库中添加对象,然后您可以添加或删除ManyToMany字段。

您正在创建WatchCount对象,但您没有保存它…当您创建类似wc=WatchCount(user=request.user(的对象时,您正在创建python对象,但没有将其插入数据库。。。您需要先保存它:we.save()然后可以使用remove或add。

相关内容

  • 没有找到相关文章

最新更新