在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。