Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Queryset API distinct()不起作用?_Python_Django - Fatal编程技术网

Python Queryset API distinct()不起作用?

Python Queryset API distinct()不起作用?,python,django,Python,Django,我想根据附加到该主题的最新消息对象对所有主题进行排序。 我执行了这个查询,但没有给出不同的查询集 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_leng

我想根据附加到该主题的最新消息对象对所有主题进行排序。 我执行了这个查询,但没有给出不同的查询集

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') 

你可以在表格中找到解释

我会通过在
主题
模型中添加一个
modified_date
字段,并在保存或删除消息时对其进行更新来取消规范化。

这里不需要distinct(),您需要的是。此查询将执行您想要的操作:

>> Topic.objects.order_by('-message__pub_date').distinct()
虽然如果这是生产代码,您可能希望遵循akaihola的建议,直接将“last_message_posted”非规范化到主题模型上

此外,Message.pub_date的默认值中还有一个错误。现在,每当您第一次运行服务器并加载此代码时,datetime.now()将执行一次,该值将用作所有消息的发布日期。改为使用此选项传递callable本身,以便在创建每条消息之前不会调用它:

from django.db.models import Max
Topic.objects.annotate(Max('message__pub_date')).order_by('-message__pub_date__max')

这个问题似乎不完整。您认为不起作用的.distinct()的用法在哪里?(顺便说一句,它确实有效)是的!对,我错过了!我现在加上!
pub_date = models.DateTimeField(default=datetime.now)