这是我的Models.py、index.html和views.py 我try 了以上,我希望得到总喜欢在我的索引页面,但我只得到0个喜欢,为什么会发生这种情况.我该如何修复它.

`from django.contrib.auth.models import AbstractUser
from django.db import models
from datetime import datetime
from django.contrib.auth import get_user_model


class CustomUser(AbstractUser):
    profile_picture = models.ImageField(
        upload_to="profile_pics/", blank=True, null=True
    )
    # Add any other custom fields as needed

    def __str__(self):
        return self.username


class Post(models.Model):
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    title = models.CharField(max_length=1000)
    content = models.TextField()
    created_at = models.DateTimeField(default=datetime.now, null=True, blank=True)
    likes = models.ManyToManyField(
        get_user_model(), related_name="liked_posts", blank=True
    )


class Like(models.Model):
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.user.username} likes {self.post.title}"`

and this is my index.html


`{% extends 'base.html' %}
{% block title %}Home{% endblock %}
{% block content %}
<h2>Welcome to the Home Page!</h2>

{% for post in posts %}
<!-- Display post details as needed -->
<div>
    <h3>{{ post.title }}</h3>
    <small>{{post.created_at}}</small>
    <p>{{ post.content }}</p>
    <form id="likeForm{{ post.id }}" data-post-id="{{ post.id }}" method="post">
        {% csrf_token %}
        <input type="submit" value="Like post">
        <span id="likeCount{{ post.id }}">{{ post.likes.count }}</span> Likes
    </form>

</div>
{% endfor %}
<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
<script>
    $(document).ready(function () {
        $('form[id^="likeForm"]').submit(function (event) {
            event.preventDefault();  // Prevent the default form submission

            var postID = $(this).data('post-id');

            // Send an AJAX request to the server
            $.ajax({
                type: 'POST',
                url: '/like/',  
                data: {
                    'post_id': postID,
                    'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val()
                },
                success: function (data) {
                    // Update the like count on success
                    $('#likeCount' + postID).text(data.likes);
                },
                error: function (error) {
                    console.log('Error:', error);
                }
            });
        });
    });


</script>

{% endblock %}`
and my views.py

`from django.shortcuts import render, redirect
from .forms import SignUpForm
from django.contrib import messages
from .models import Post, Like
from django.http import JsonResponse
from django.shortcuts import get_object_or_404


# Create your views here.
def index(request):
    posts = Post.objects.all()
    return render(request, "index.html", {"posts": posts})


def register(request):
    if request.method == "POST":
        form = SignUpForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data["username"]
            messages.success(request, f"{username} has been registered")
            return redirect("index")
    form = SignUpForm()
    return render(request, "register.html", {"form": form})


def create(request):
    if request.method == "POST":
        title = request.POST.get("title")
        content = request.POST.get("content")

        user = request.user
        new_post = Post.objects.create(title=title, content=content, user=user)
        new_post.save()
        posts = Post.objects.all()
        return redirect("index")
    return render(request, "create.html")


def like_post(request):
    if request.method == "POST":
        post_id = request.POST.get("post_id")
        post = get_object_or_404(Post, id=post_id)
        user = request.user

        # Check if the user has already liked the post
        if Like.objects.filter(user=user, post=post).exists():
            return JsonResponse(
                {"error": "You have already liked this post"}, status=400
            )

        # Create a new like
        like = Like(user=user, post=post)
        like.save()
        print(Like.objects.filter(post=post).count())

        # Return the updated like count as JSON
        updated_likes_count = Like.objects.filter(post=post).count()
        print(updated_likes_count)
        print("n")
        return JsonResponse({"likes": updated_likes_count})
    else:
        return JsonResponse({"error": "Invalid request"}, status=400)`

我try 了上述方法,我希望在我的索引页中获得总喜欢计数,但我只得到0喜欢为什么会发生这种情况.我该怎么弥补 它不让我张贴,所以我添加了一些额外的话........姆凯费克亚菲 洛雷姆·伊普苏姆

JJ J J J J J

J WHYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

推荐答案

好的.

1) 移除

likes = models.ManyToManyField(         get_user_model(), related_name="liked_posts", blank=True     )

Post模型的一部分.

2) 添加

    @property   
    def post_like_count(self):
        count = Like.objects.filter(post=self).count()
        return count

在您的

def __str__(self): 

功能.Inside Post模型.

  1. 内部模板使用
{{ post.post_like_count }}

Python-3.x相关问答推荐

"安装serial vs安装psyserial header,"""

使用Polars阅读按日期键分区的最新S3镶木地板文件

只有在Chrome尚未打开的情况下,打开Chrome后,PySimpleGUI窗口才会崩溃

如何转换Pandas中的数据,以使我 Select 的列名变为行值并增加行?

将列表项的极列水平分解为新列

删除浮点型数据集中每列重复值比例超过一定阈值的列

torch.stack([t1, t1, t1], dim=1)与torch.hstack([t1, t1, t1])之间有什么区别?

TypeError: issubclass() arg 1 在 Flask 中导入 langchain 时必须是一个类

为什么不能用格式字符串 '-' 绘制点?

如何确保 GCP Document AI 模型输出与输入文件同名的 JSON?

在 groupby 之后,Pandas 在特定类别中获得最常见和最后的值

将数据框中的值与另一个数据框中的多列进行比较,以获取条目以有效方式匹配的列表列表

matplotlib.pyplot 多边形,具有相同的纵横比和紧凑的布局

找到操作系统的图片文件夹的 CLI

spinbutton调整up/down箭头

如何模拟 Django 模型对象(及其方法)?

python total_ordering:为什么使用 __lt__ 和 __eq__ 而不是 __le__?

asyncio.Semaphore RuntimeError: Task got Future 附加到不同的循环

Python heapify() 时间复杂度

如何判断列表中的所有项目是否都是字符串