在特定情况下对查询集进行排序-Django

在特定情况下对查询集进行排序-Django,django,Django,我有这个模型: class Question(models.Model): user = models.ForeignKey(User) title = models.CharField(max_length=50, verbose_name='Titolo') text = models.TextField(verbose_name='Testo') category = TreeForeignKey(CoursesCategory, verbose_name=

我有这个模型:

class Question(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=50, verbose_name='Titolo')
    text = models.TextField(verbose_name='Testo')
    category = TreeForeignKey(CoursesCategory, verbose_name='Categoria')
    created_at = models.DateTimeField(auto_now_add=True)
我在另一个应用程序中有另一个模型:

class Like(models.Model):
    user = models.ForeignKey(User)
    value = models.IntegerField(verbose_name='Voto')
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_pk = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_pk')
现在,我应该在问题视图中对问题进行排序,这些问题与模型的相对值类似

我正在尝试使用这种方法

def get_queryset(self):
    questions = Question.objects.all()
    questions = questions.annotate(ranking_vote=Coalesce(Sum(...), 0)).order_by('-ranking_vote')
但我想不出解决办法是什么

你能帮我吗

class Like(models.Model):
    user = models.ForeignKey(User)
    question = models.ForeignKey(Question) # New field
    value = models.IntegerField(verbose_name='Voto')
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_pk = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_pk')
在此之后,您可以对问题对象使用:
like\u set

q.like_set.count() # return like number link to this question object
关于您的请求,您可以:

from django.db.models import Count
questions = Question.objects.annotate(num_like=Count('like')).order_by('-num_like')

我不理解你的问题:是你关于如何使用get_queryset()的问题,还是你关于如何编写排序queryset的问题。你能让你的问题定义和问题更精确吗?你不能用你的问题模型访问Like。您需要在您的模型之间创建链接。