在django queryset

时间:2015-10-16 18:44:10

标签: python sql django postgresql django-queryset

我需要帮助为django queryset中使用的extra()修饰符编写一些SQL。陷入困境,优雅的框架,几次重审导致死胡同。救命啊!

背景:我有一个人们提交有趣网址的网站(在我的models.py中称为Link)。其他用户可以在发布的每个链接下发布评论(在我的models.py中称为Publicreply)。

以下是我想要做的事情:对于每个用户,我想生成一个查询集 -

(i)仅包含用户在

下评论的链接

(ii)按每个链接下最近评论的时间戳排序。例如。如果链接有多个注释,我希望最新注释的时间戳对查询集中的所述链接进行排序。请注意,此评论可以来自任何人(不一定来自用户自己)。

现在我可以直接从 views.py

获取一些简单的代码
class UserActivityView(ListView):
    model = Link
    slug_field = "username"
    template_name = "user_activity.html"
    paginate_by = 10

    def get_queryset(self):
        comments_by_user = Publicreply.objects.filter(submitter=user)
        links_with_comments = [reply.answer_to.id for reply in replies_by_user.iterator()]
        qset = Link.objects.filter(id__in=links_with_comments).extra(select={'submitted_on':"SELECT max('submitted_on') FROM 'links_publicreply' WHERE 'links_publicreply.answer_to' = 'links_link.id'"})
        return qset

models.py 包含:

class Publicreply(models.Model):
    submitter = models.ForeignKey(User)
    answer_to = models.ForeignKey(Link)
    submitted_on = models.DateTimeField(auto_now_add=True)
    description = models.TextField(validators=[MaxLengthValidator(250)])

class Link(models.Model):
    submitter = models.ForeignKey(User)
    submitted_on = models.DateTimeField(auto_now_add=True)
    url = models.URLField(max_length=250)

我在extra()方法views.py下的get_queryset()修饰符中写的SQL没有给出所需的结果(我得到None)。请注意,我正在尝试使用extra()修饰符将publicreply实例的最新时间戳附加到其相关的link。我稍后会根据上述时间戳对查询集进行排序。

请在extra()修饰符中帮助您制定正确的SQL。我使用 Django 1.5 Python2.7 。感谢。

0 个答案:

没有答案