Ich habe einen Beitrag Modell:Django erhalten Post Antworten
class Post(models.Model):
poster = models.ForeignKey('auth.User')
question = models.ForeignKey('self', null=True, blank=True)
post_title = models.CharField(max_length=300)
post_content = models.TextField(null=True, blank=True)
is_question = models.BooleanField(default=True)
.
.
.
created_date = models.DateTimeField(
default=timezone.now)
def __str__(self):
return self.post_title
Dies wird Frage- und Antwort-Website sein, genau wie SO. Wenn dieser Beitrag eine Frage ist, wird "is_question" wahr sein. sonst, wenn der Beitrag eine Antwort ist, 'Frage' Feld bezieht sich auf die ID des Beitrags, die die Frage ist und 'is_question' wird falsch sein.
einfach, richtig.
Jetzt versuche ich alle Fragen und die zugehörigen Antworten zu bekommen, ist das mit einer oder wenigen Abfragen möglich (ohne for-Schleife)?
Der folgende Filter wird die Fragen und einige verwandte Dinge zurückkehren nur (wie Anzahl der upvotes, Ansichten, Post-Tags):
posts = Post.objects.filter(
created_date__lte=timezone.now(),
is_question=1,
is_published=1
).order_by(
'-created_date',
).prefetch_related(
Prefetch('vote_set', queryset=Vote.objects.filter(
user=request.user, date_voted__gte=dt_aware), to_attr='user_voted')
).prefetch_related(
Prefetch('tags', to_attr='tagss')
).annotate(total_votes=Coalesce(Sum('vote__vote_type'),0)
).annotate(views_num = Count('questionvieaw', distinct=True)
).select_related()
Das ist sehr gut möglich. Erstellen Sie ein Fragenmodell mit einer Eigenschaft * Antworten *. Erstellen Sie dann ein Antwortmodell. Das lässt die Abfrage als Question.objects.all() – David
Was befindet sich in dem Antwortfeld? eine durch Komma getrennte Liste von Antwort-IDs? – SMahdiS