Python 无法在指定中间模型的ManyToManyField上使用add()。使用.LikeTimestamp';他是经理
我正试图在我的博客上写一篇好文章。遇到问题,不知道如何使用这里的管理器。 我猜这是我的主要错误。无法在指定中间模型的ManyToManyField上使用add()。使用Posts,比如teimestamp的经理 我的型号:Python 无法在指定中间模型的ManyToManyField上使用add()。使用.LikeTimestamp';他是经理,python,django,many-to-many,Python,Django,Many To Many,我正试图在我的博客上写一篇好文章。遇到问题,不知道如何使用这里的管理器。 我猜这是我的主要错误。无法在指定中间模型的ManyToManyField上使用add()。使用Posts,比如teimestamp的经理 我的型号: class Like(models.Model): class Meta: db_table = 'like' post = models.OneToOneField(Post, null=True) liked_users = mod
class Like(models.Model):
class Meta:
db_table = 'like'
post = models.OneToOneField(Post, null=True)
liked_users = models.ManyToManyField(User, blank=True, through='LikeTimestamp')
likes = models.IntegerField(default=0, blank=True)
class LikeTimestamp(models.Model):
class Meta:
db_table = 'liketimestamp'
timestamp = models.DateTimeField(auto_now=True, auto_now_add=False)
like = models.ForeignKey(Like)
user = models.ForeignKey(User)
@login_required
def like_post(request, comments_id):
try:
like, created = Like.objects.get_or_create(comments_id=comments_id)
like.post = Post.objects.get(id=comments_id)
if request.user in like.liked_users.all():
like.liked_users.remove(request.user)
like.likes -= 1
else:
like.liked_users.add(request.user)
like.likes += 1
like.save()
except ObjectDoesNotExist:
raise Http404
return redirect(request.META.get('HTTP_REFERER'))
我的观点:
class Like(models.Model):
class Meta:
db_table = 'like'
post = models.OneToOneField(Post, null=True)
liked_users = models.ManyToManyField(User, blank=True, through='LikeTimestamp')
likes = models.IntegerField(default=0, blank=True)
class LikeTimestamp(models.Model):
class Meta:
db_table = 'liketimestamp'
timestamp = models.DateTimeField(auto_now=True, auto_now_add=False)
like = models.ForeignKey(Like)
user = models.ForeignKey(User)
@login_required
def like_post(request, comments_id):
try:
like, created = Like.objects.get_or_create(comments_id=comments_id)
like.post = Post.objects.get(id=comments_id)
if request.user in like.liked_users.all():
like.liked_users.remove(request.user)
like.likes -= 1
else:
like.liked_users.add(request.user)
like.likes += 1
like.save()
except ObjectDoesNotExist:
raise Http404
return redirect(request.META.get('HTTP_REFERER'))
我的朋友建议我的用户过滤,错误消失了。此外,关于用户创建的内容也有错误的说法。我应该使用创建和删除时间戳模型。这是正确的代码
@login_required
def like_post(request, post_id):
try:
like, created = Like.objects.get_or_create(post_id=post_id)
like.post = Post.objects.get(id=post_id)
if like.liketimestamp_set.filter(user=request.user).exists():
LikeTimestamp.objects.filter(like_id=like.id, user=request.user).delete()
like.likes -= 1
else:
LikeTimestamp.objects.create(like_id=like.id, user=request.user)
like.likes += 1
like.save()
except ObjectDoesNotExist:
raise Http404
return redirect(request.META.get('HTTP_REFERER'))