class Message(models.Model):
subject = models.CharField(max_length=100)
pub_date = models.DateTimeField(default=datetime.now())
class Topic(models.Model):
title = models.CharField(max_length=100)
message = models.ManyToManyField(Message, verbose_name='Discussion')
我想根据附加到该主题的最新邮件对象对所有主题进行排序。 我执行了这个查询,但是没有给出不同的queryset。
>> Topic.objects.order_by('-message__pub_date').distinct()
你可以在documentation for ^{} 中找到解释。
我将通过在
Topic
模型中添加一个modified_date
字段并在保存或删除消息时更新它来取消规范化。这里不需要distinct(),需要的是aggregation。此查询将执行您想要的操作:
尽管这是生产代码,但您可能希望遵循akaihola的建议,并将“last_message_posted”直接反规范化到主题模型上。
此外,Message.pub_date的默认值也有错误。现在,每当您第一次运行服务器并加载此代码时,datetime.now()将执行一次,该值将用作所有消息的发布日期。请改为使用此选项传递可调用自身,以便在创建每个消息之前不会调用它:
相关问题 更多 >
编程相关推荐