我的应用程序中有以下两种型号,
class Question(models.Model):
question_text = models.CharField(max_length=200)
question_author = models.ForeignKey(User, on_delete=models.CASCADE)
q_pub_date = models.DateTimeField('Date Question Published')
def __str__(self):
return self.question_text
class Answer(models.Model):
answer_text = models.CharField(max_length=5000)
answer_author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='ans_auth')
question = models.ForeignKey(Question, on_delete=models.CASCADE)
a_pub_date = models.DateTimeField('Date Answer Published')
def __str__(self):
return self.answer_text
我想在首页上显示最新问题。列表中的每个项目都会显示问题文本和针对该特定问题发布的众多问题中的一个答案。我能够显示问题文本,但无法在下面的视图中找到获取每个问题项目答案的方法,
def home(request):
latest_question = Question.objects.order_by('-q_pub_date')[:15]
答案 0 :(得分:1)
您可以使用related_name
访问所有答案:
>>> question = Question.objects.get(question_text='random question')
>>> print(question.answer_set.all())
您可以在https://docs.djangoproject.com/en/2.0/ref/models/fields/#django.db.models.ForeignKey.related_name
上了解更多有关此内容的信息。答案 1 :(得分:0)
您可以针对特定的问题获得 answer ,在视图中具有question_instance.answer_set.all()
的反向关系,在模板中具有{{ question_instance.answer_set.all }}
的反向关系。
要选择一个答案,可以使用slice
或first()
:
{{question_instance.answer_set.all.0 }} # templates
question_instance.answer_set.first() # views
如果您想向问题添加新字段
votes
,并且希望获得投票数最高的 answer ?
问题模型中的属性方法将执行以下操作:
@property
def higher_answer(self):
return self.answer_set.all().order_by('vote').last()