有意义的是,查询集不能通过模型方法过滤,查询集只能在数据库上过滤,数据库也不知道模型方法。
话虽这么说,有必要做一些类似的事情吗?
class Topic(models.Model):
"An individual discussion post in the forum"
created = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(User)
title = models.CharField(max_length=60)
content = models.CharField(max_length=2000)
view_count = models.PositiveIntegerField(default=0, editable=False)
def last_reply(self):
"latest reply for a forum topic"
if self.replies.all():
return self.replies.latest('created')
return None
class TopicReply(models.Model):
"A reply to a discussion topic or to another reply"
created = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(User)
topic = models.ForeignKey(Topic, related_name="replies")
content = models.CharField(max_length="1000")
parent_reply = models.ForeignKey("self", null=True, blank=True, related_name='replies')
以下是我的两个模型,我想要做的是按照上次回复日期订购主题。使用查询集我尝试使用return sorted(queryset, key=lambda t:t.last_reply())
在内存中进行排序,但是在Python 3中存在空值和错误。而不是在last_reply
方法中返回None,我尝试返回空字符串或TopicReply.objects.none()
但排序的函数不喜欢其中任何一个。