proyectos ejemplos python django

python - ejemplos - Queryset API distinct() no funciona?



django (2)

Encontrará la explicación en la documentación para .distinct() .

Desnormalizaría agregando un campo modified_date al modelo Topic y actualizándolo siempre que se guarde o elimine un mensaje.

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

Quiero ordenar todos los temas de acuerdo con el último objeto de mensaje adjunto a ese tema. Ejecuté esta consulta, pero esto no da el queryset distinto.

>> Topic.objects.order_by(''-message__pub_date'').distinct()


No necesita distinct () aquí, lo que necesita es agregación . Esta consulta hará lo que quieras:

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

Aunque si se trata de código de producción, es probable que desee seguir el consejo de akaihola y desnormalizar "last_message_posted" en el modelo Topic directamente.

Además, hay un error en su valor predeterminado para Message.pub_date. Como lo tiene ahora, cada vez que ejecuta el servidor y se carga este código, datetime.now () se ejecutará una vez y ese valor se usará como pub_date para todos los mensajes. Use esto en su lugar para pasar el callable en sí mismo para que no se invoque hasta que se haya creado cada mensaje:

pub_date = models.DateTimeField(default=datetime.now)