2016-04-07 10 views
2

Ich mache DialogsystemGruppe von ForeignKey und erhalten ganze Objekt

class Dialog(models.Model): 
    create_date = models.DateTimeField(auto_now_add=True, blank=False, null=False) 
    author = models.ForeignKey(User, related_name="author_customer", blank=False, null=False) 
    interlocutor = models.ForeignKey(User, related_name="interlocutor_customer", blank=False, null=False) 
    archive_date = models.DateTimeField(blank=True, null=True) 
    last_view_date = models.DateTimeField(blank=True, null=True) 

class DialogMessage(models.Model): 
    create_date = models.DateTimeField(auto_now_add=True, blank=False, null=False) 
    dialog = models.ForeignKey(Dialog, blank=False, null=False) 
    author = models.ForeignKey(User, blank=False, null=False) 
    message = models.TextField(blank=False, null=False) 
    attachment = models.FileField(upload_to='dialogs', blank=True, null=True) 

ich erstellen Datum letzte Meldung erhalten möchten für jeden Dialog

* Dialog1 
    Last Message 
* Dialog2 
    Last Message  

Ich habe versucht, es so zu machen

DialogMessage.objects.values('dialog_id').annotate(last_date=Max('create_date')) 

Aber es gibt mir

[{'dialog_id': 1, 'last_date': datetime.datetime(2016, 4, 6, 3, 15, 56, 267626, tzinfo=<UTC>)}, {'dialog_id': 2, 'last_date': datetime.datetime(2016, 4, 7, 13, 24, 33, 856453, tzinfo=<UTC>)}, {'dialog_id': 3, 'last_date': datetime.datetime(2016, 4, 7, 13, 25, 14, 948088, tzinfo=<UTC>)}] 

Wie kann ich nicht nur last_date, sondern ganze DialogMessage

Am Ende möchte ich Liste der letzten DialogMessage für jeden Dialog

Antwort

0

Ich würde so etwas wie dies versuchen:

DialogMessage.objects.annotate(last_date=Max('create_date')) 

Basicly Sie sollten in values() alle Parameter angeben, die Sie dort wünschen. Sie haben nur dialog_id und last_date in Anmerkung angegeben.

Wenn Sie values() verwenden müssen, verwenden:
objects.values('dialog_id', 'dialog__create_date', 'dialog__author', ...) (Parameter von Fremdschlüsseln angeben Sie müssen sie durch Doppelstrich trennen __)

Ich denke auch, dass in beiden Modellen author mit schlechtem Design .

Verwandte Themen