如何计算外键项,尤其是使用 Django 的用户模型创建的“作者”?

问题描述

需要帮助更好地掌握 1) 访问和计算 Django 中的外键项和 2) 计算通过 Django 的内置用户创建的外键项:

#1) answer here 建议使用 Django 的 annotate 函数:例如。 questions = Question.objects.annotate(number_of_answers=Count('answer'))(问题是要回答的外键项)。但是我不清楚这条线属于哪里(在示例的情况下,问题或答案),或者 app-models.py 或 views.py 的哪一部分。我在models.py和views.py中都进行了测试

这是我的模型(这里只有基本的线条):

class Post(models.Model):
            post = models.TextField(max_length=1000)
            author = models.ForeignKey(User,related_name="author",on_delete=models.CASCADE)

class Comment(models.Model):
    comment = models.TextField(max_length=1000)
    commenter = models.ForeignKey(User,on_delete=models.CASCADE)
    post_connected =  models.ForeignKey(Post,related_name='posts',on_delete=models.CASCADE,default=None,null=True)

#2) 如何计算使用 Django 的内置模型 User 创建的外键项? 我应该先创建一个名为“作者”的模型吗?

解决方法

我想告诉你一些关于 related_name 的事情: related_name 帮助您访问另一个模型的对象,例如

class Post(models.Model):
    post = models.TextField(max_length=1000)
    author = models.ForeignKey(User,related_name="posts",on_delete=models.CASCADE)

class Comment(models.Model):
    comment = models.TextField(max_length=1000)
    commenter = models.ForeignKey(User,on_delete=models.CASCADE)
    post_connected =  models.ForeignKey(Post,related_name='comments',on_delete=models.CASCADE,default=None,null=True)

使用 modelobject.related_name.all() 获取本示例中另一个模型的对象 userobject.posts.all() 您可以获取与用户对象相关的所有帖子。 并使用 post.comments.all() 可以获得与帖子相关的所有评论。