Ich versuche ein gutes wie in meinem Blog zu machen. Problem, ich weiß nicht, wie man Manager hier benutzt. Raten Sie, das ist mein Hauptfehler. Kann add() für ein ManyToManyField nicht verwenden, das ein intermediäres Modell angibt. Verwenden Sie stattdessen den Manager von Posts.LikeTimestamp.Kann add() für ein ManyToManyField, das ein intermediäres Modell angibt, nicht verwenden. Benutze .LikeTimestamp's Manager stattdessen
meine Modelle:
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)
meine Ansichten:
@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'))