2017-09-23 2 views
0

Dies ist, wie mein Modell wie,Django: Verhindern, dass Daten Wiederholung

class Question(models.Model): 
    .... 

& eine andere

class Answer(models.Model): 
    question = models.ForeignKey(Question, on_delete=models.CASCADE) 
    .... 

Ich versuche, den Filter aus, diese Fragen sucht die Antwort haben, habe ich versucht, die einfachste Art und Weise, dh

result = Question.objects.order_by('-answer')[:10] 

Wie sollte es die Frage in den Ergebnissen zu wiederholen, wenn sie ha Ich habe mehr als eine Antwort, die ich nicht möchte. Ich habe distinct() versucht, aber es funktioniert nicht.

Ich möchte nur eine Frage einmal angezeigt werden, auch wenn es mehrere Antworten hat. Wie kann ich die Wiederholung von Fragen in Ergebnissen verhindern, wenn sie mehrere Antworten haben? Was ist der beste Weg, dies zu tun?

Bitte helpme. Vielen Dank :)

Antwort

0

die Sie interessieren, ich weiß nicht, ob dies mit allen Datenbanken arbeitet

Question.objects.filter(answer__isnull=False).order_by('-answer').distinct('id')[:10] 

UPDATES:

Um das zu erreichen, was Sie brauchen, ist eine Methode, ein hinzufügen Feld last_answer_time zum Frage Modell wie folgt aus:

class Question(models.Model): 
    content = models.CharField(max_length=100) 
    last_answer_time = models.DateTimeField(null=True) 
class Answer(models.Model): 
    question = models.ForeignKey(Question) 

    def save(self, force_insert=False, force_update=False, using=None, 
     update_fields=None): 
     self.question.last_answer_time = timezone.now() 
     self.question.save() 
     return super(Answer, self).save() 

und das Verfahren des ähnlichen Antwort Modells speichern überschreiben diese aktualisieren den last_answer_time Bereich der Frage jedes Mal eine Antwort erstellt wird. Jetzt können Sie einfach es wie folgt abfragen:

Question.objects.filter(last_answer_time__isnull=False).order_by('-last_answer_time') 
0

Sie nicht Ihr gesamtes Modell zur Verfügung stellen, so dass ich ein paar Annahmen - wie die Primärschlüssel ist id, aber man kann so etwas wie dies in SQLite versuchen :

Questions.objects.filter(id__in=Answers.objects.values('question').distinct()) 
Verwandte Themen