我需要帮助为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 。感谢。