Я пытаюсь заставить мою кнопку «Мне нравится» работать на моем сайте.Вы можете делать "твиты" на моем сайте, но пользователям не нравится публикация.Я уже настроил интерфейс с помощью AJAX.это работает отлично.Проблема заключается в моих взглядах.
Вот мои модели
class Tweet(models.Model):
tweet_user = models.ForeignKey(User, on_delete=models.CASCADE)
tweet_message = models.TextField()
tweet_date = models.DateTimeField(auto_now_add=True)
tweet_like_counter = models.IntegerField(default=0)
tweet_picture = models.FileField(null=True,blank=True)
def __str__(self):
return self.tweet_message
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
tweet = models.ForeignKey(Tweet, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.tweet.tweet_message
class Disike(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
tweet = models.ForeignKey(Tweet, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.tweet.tweet_message
class TweetComment(models.Model):
class Meta:
ordering = ['-id']
tweetcomment = models.ForeignKey(Tweet, on_delete=models.CASCADE, related_name='tweetcomments')
tweetcommentauthor = models.ForeignKey(User,on_delete=models.CASCADE)
tweetcommentmessage = models.TextField()
tweetcommentcomment_date_created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.tweetcommentmessage
Вот мои взгляды
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
@login_required
def like(request, pk):
currentTweet = get_object_or_404(Tweet,pk=pk)
user = User.objects.get(pk=request.user.id)
like = Like.objects.create(tweet=currentTweet, user=user)
like_queryset = Like.objects.filter(tweet=currentTweet, user=user)
dislike_queryset = Disike.objects.filter(tweet=currentTweet, user=user)
if like_queryset.exists():
Like.objects.filter(tweet=currentTweet, user=user).delete()
dislikeobject = Disike.objects.filter(tweet=currentTweet).count()
likeobject = Like.objects.filter(tweet=currentTweet).count()
currentTweet.tweet_like_counter = likeobject - dislikeobject
currentTweet.save()
if dislike_queryset.exists():
Disike.objects.filter(tweet=currentTweet, user=user).delete()
dislikeobject = Disike.objects.filter(tweet=currentTweet).count()
likeobject = Like.objects.filter(tweet=currentTweet).count()
currentTweet.tweet_like_counter = likeobject - dislikeobject
currentTweet.save()
return JsonResponse({
'like_counter': currentTweet.tweet_like_counter
})
@csrf_exempt
@login_required
def dislike(request, pk):
currentTweet = get_object_or_404(Tweet, pk=pk)
user = User.objects.get(pk=request.user.id)
dislike = Disike.objects.create(tweet=currentTweet, user=user)
like_queryset = Like.objects.filter(tweet=currentTweet, user=user)
dislike_queryset = Disike.objects.filter(tweet=currentTweet, user=user)
if dislike_queryset.exists():
Disike.objects.filter(tweet=currentTweet, user=user).delete()
dislikeobject = Disike.objects.filter(tweet=currentTweet).count()
likeobject = Like.objects.filter(tweet=currentTweet).count()
currentTweet.tweet_like_counter = likeobject - dislikeobject
currentTweet.save()
if like_queryset.exists():
Like.objects.filter(tweet=currentTweet, user=user).delete()
dislikeobject = Disike.objects.filter(tweet=currentTweet).count()
likeobject = Like.objects.filter(tweet=currentTweet).count()
currentTweet.tweet_like_counter = likeobject - dislikeobject
currentTweet.save()
return JsonResponse({
'like_counter': currentTweet.tweet_like_counter
})
Я не знаю, что еще делать.Когда я запускаю этот код, я не получаю ошибок, но когда я нажимаю кнопку «Мне нравится», не создается похожий объект ...
НО, когда я использую этот код в представлении.
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
@login_required
def like(request, pk):
currentTweet = get_object_or_404(Tweet,pk=pk)
user = User.objects.get(pk=request.user.id)
like = Like.objects.create(tweet=currentTweet, user=user)
like_queryset = Like.objects.filter(tweet=currentTweet, user=user)
dislike_queryset = Disike.objects.filter(tweet=currentTweet, user=user)
return JsonResponse({
'like_counter': currentTweet.tweet_like_counter
})
@csrf_exempt
@login_required
def dislike(request, pk):
currentTweet = get_object_or_404(Tweet, pk=pk)
user = User.objects.get(pk=request.user.id)
dislike = Disike.objects.create(tweet=currentTweet, user=user)
like_queryset = Like.objects.filter(tweet=currentTweet, user=user)
dislike_queryset = Disike.objects.filter(tweet=currentTweet, user=user)
return JsonResponse({
'like_counter': currentTweet.tweet_like_counter
})
Лайк создан, но пользователи смогут продолжать лайкать тот же пост.Я застрял на этом в течение дня или двух.кто-нибудь может помочь?