2017-07-29 3 views
1

Ich weiß nicht, wie man in dieser Situation zu bestellen. Kann jemand weiß sein.Django Bestellung nach Ausgabe

Ich habe 2 Modelle:

Kommentare:

class Comments(models.Model): 
    text = models.CharField(max_length=300, null=False) 
    image = models.FileField(upload_to=user_directory_path_comments, validators=[validate_file_extension], blank=True, null=True) 
    articles = models.ForeignKey(Articles, verbose_name="Article", null=False) 
    author = models.ForeignKey(User, verbose_name="Auteur") 
    in_answer_to = models.ForeignKey('self', verbose_name="En réponse au commentaire", blank=True, null=True, on_delete=models.CASCADE) 
    date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de création") 
    update = models.DateTimeField(auto_now=True, verbose_name="Dernière modification") 

und bis Modell:

class Up(models.Model): 
    comments = models.ForeignKey(Comments, verbose_name="Commentaire", null=True, blank=True) 
    user = models.ForeignKey(User, verbose_name="Auteur", null=False) 

Nutzer können Kommentare hinzufügen und sie können "Up" einige nützliche Kommentare.

Also, standardmäßig möchte ich Kommentare nach Datum bestellen. Allerdings möchte ich die Reihenfolge nach Anzahl der Ups priorisieren.

Um Ihnen eine Idee zu geben, wie Kommentare und Up registrieren sind, ist dies ein Screenshot von meiner Datenbank:

Kommentare: enter image description here

Up: enter image description here

Zum Beispiel kann der Kommentar in dem ID ist 50 hat 2 Up von zwei verschiedenen Benutzern. Also sollte es im Vergleich zu dem Kommentar 49, der nur 1 Up hat, ganz oben stehen.

Vorerst benutze ich nur die Reihenfolge nach Datum und ich brauche die Reihenfolge von oben:

comments = Comments.objects.all().exclude(in_answer_to__isnull=False).order_by('-date') 

Ich brauche so etwas wie:

comments = Comments.objects.all().exclude(in_answer_to__isnull=False).order_by('-date', 'Up') 
+2

Haben Sie gesehen [Bestellung nach Anzahl eines ForeignKey-Feldes] (https://stackoverflow.com/a/2501178/4974980)? –

+1

Ich wusste nichts davon. – GrandGTO

+1

Mögliches Duplikat von [Reihenfolge nach Anzahl eines ForeignKey-Feldes?] (Https://stackoverflow.com/questions/2501149/order-by-count-of-a-foreignkey-field) –

Antwort

1

Wie denken Sie über SQL für die folgende Reihenfolge Problem, würden Sie feststellen, dass Sie wahrscheinlich Anzahl der genannten Objekte zählen müssen

so annotate Zählung und Ordnung durch sie

comments = Video.objects.all().exclude(
    in_answer_to__isnull=False 
).annotate(
    num_up=Count('up') 
).order_by('-date', 'num_up') 
+0

Danke, es ist so etwas. – GrandGTO