Python Django模型根据GenericForeignKey引用的另一个模型中的计数对一个模型进行排序

Python Django模型根据GenericForeignKey引用的另一个模型中的计数对一个模型进行排序,python,django,django-models,django-queryset,Python,Django,Django Models,Django Queryset,我正在使用Django3.2 我有以下应用程序和型号: 社交模式/models.py foo/models.py 注意:我不能修改Foo代码(第三方遗留代码),但我想向Foo添加“Like”功能。我有一些实用程序函数,它们可以在Like表中创建新记录,并将引用添加到喜欢的对象 我想编写一个queryset函数,它返回一组Foo对象,但按喜欢的顺序排列。我知道我必须使用聚合或注释,但我不确定如何使用 python manage.py shell 我得到一个例外: django.core.excep

我正在使用Django3.2

我有以下应用程序和型号:

社交模式/models.py foo/models.py 注意:我不能修改Foo代码(第三方遗留代码),但我想向Foo添加“Like”功能。我有一些实用程序函数,它们可以在Like表中创建新记录,并将引用添加到喜欢的对象

我想编写一个queryset函数,它返回一组Foo对象,但按喜欢的顺序排列。我知道我必须使用聚合或注释,但我不确定如何使用

python manage.py shell 我得到一个例外:

django.core.exceptions.FieldError:无法将关键字“like”解析为字段。选择是:


我的问题是-如何返回按最受欢迎对象排序的Foo对象记录集?

请完成您的Foo模型。你说我不能修改Foo代码是什么意思
class SocialAction(models.Model):
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE,related_name='%(class)s_content_type')
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')
    user = models.ForeignKey(User, blank=False, null=False, on_delete=models.CASCADE,related_name='likes')
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        abstract = True
        constraints = [
            models.UniqueConstraint(fields=['content_object', 'user'], name="unique_like"),
        ]


class Like(SocialAction):
    pass
class Foo(models.Model):
    pass
>>> from Foo.models import Foo
>>> from social.models import Like
>>> Foo.objects.annotate(num_likes=Count('like'))