django模型上返回外键计数的方法

django模型上返回外键计数的方法,django,Django,我想要一个django模型上的方法,该方法返回foreignkey中的成员计数。我希望它是一个类方法(而不是注释),因为我希望序列化它并通过javascript发送它,而不涉及模板 基于之前对类似问题的回答,我认为以下类型的结构会起作用(为了简单起见,删除了一些属性): 但是当我运行这个时,我得到了AttributeError:“Post”对象没有属性“likedby_set”。有人知道为什么这样不行吗 编辑:谢谢你对这一切的帮助。我现在在想:通过添加一个类似这样的类来重组模型是否更有意义 cl

我想要一个django模型上的方法,该方法返回foreignkey中的成员计数。我希望它是一个类方法(而不是注释),因为我希望序列化它并通过javascript发送它,而不涉及模板

基于之前对类似问题的回答,我认为以下类型的结构会起作用(为了简单起见,删除了一些属性):

但是当我运行这个时,我得到了AttributeError:“Post”对象没有属性“likedby_set”。有人知道为什么这样不行吗

编辑:谢谢你对这一切的帮助。我现在在想:通过添加一个类似这样的类来重组模型是否更有意义

class Like(models.Model):
    liker = models.ForeignKey('User', on_delete=models.CASCADE, related_name='likes')
    post = models.ForeignKey('Post', on_delete=models.CASCADE, related_name='likes')
然后,也许在Post类中,我可以
返回likes\u set.count()
(假设这是有效的)


编辑2:如果对将来可能看这篇文章的人有用,上述解决方案将不起作用,因为
likes
不是查询集;这只是一个相关的名字,指向那些喜欢这篇文章的人。为了将这些人正确地聚集到查询集中并进行计数,我在模型中定义的序列化中执行了以下操作:
likes=self.likes.all().count()
,这似乎很有效。

你能分享你的观点吗。py?
likedby
对于一篇文章来说,它只是一个用户,因此,没有可用的
\u集
。您需要使用ManyToManyField;类似于
likedby=models.ManyToManyField的内容('User',…
啊,这就是为什么设置技巧不起作用的原因。我正在考虑重新构造模型并创建一个相似的模型,这可能比在PostCan上设置一个相似的字段更有意义,你可以共享你的视图。py?
likedby
对于一篇帖子来说,它只是一个用户,因此没有可用的
\u集。你会想使用很多ToManyField;类似于
likedby=models.ManyToManyField('User'),…
啊,这就是为什么设置技巧不起作用的原因。我正在考虑重新构造模型并创建一个like模型,这可能比在帖子中添加like a s a字段更有意义
class Like(models.Model):
    liker = models.ForeignKey('User', on_delete=models.CASCADE, related_name='likes')
    post = models.ForeignKey('Post', on_delete=models.CASCADE, related_name='likes')