Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何仅从django中的ForeignKey模型中获取一项?_Python_Django_Django Models_Django Views - Fatal编程技术网

Python 如何仅从django中的ForeignKey模型中获取一项?

Python 如何仅从django中的ForeignKey模型中获取一项?,python,django,django-models,django-views,Python,Django,Django Models,Django Views,我的应用程序中有以下两种型号 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__(se

我的应用程序中有以下两种型号

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]

您可以使用相关的名称访问所有答案:

您可以在以下网站上阅读更多信息:

您可以使用视图中的反向关系question_instance.answer_set.all和模板中的{question_instance.answer_set.all}}来获得特定问题的答案

要选择一个答案,可以使用slice或first:

如果您想在问题中添加一个新的字段投票,并且希望得到投票率最高的答案

问题模型中的属性方法将执行以下操作:

@property
def higher_answer(self):
    return self.answer_set.all().order_by('vote').last()

你可以用question_instance.answer_set.all在视图中获得特定问题的答案,{{question_instance.answer_set.all}嘿@Lemayzeur我只需要对结果集中的每个问题都有一个答案。所以你可以用slice选择一个问题,或者首先:{question_instance.answer_set.all.0}首先是问题,例如:回答:是的。有效,是否有其他方法根据条件过滤掉?比如,假设我在问题中添加一个新的字段投票,我想要投票率最高的答案?问题模型中的属性方法只需要一个条件,比如:返回self.answer\u set.all.order\u by'vote'。是的,我知道在我做了一些搜索之后,但我只需要对同一查询集中的每一个问题都有一个答案和问题文本,这样我就可以在我的主页上重复这些问题以显示数据。@vikasdevde,请参阅answerHey@Lemayzeur,答案集只返回答案文本,如何在同一个结果集中获得答案?当您回答“set.all”时,您可以访问一个查询集,正如您之前所问的,您只需要一个答案,因此请从模板中的“queryset answer”\u set.all.fisrt或{answer\u set.all.0}中选择一个实例,然后您就可以访问答案模型的所有属性:Answer_set.all.fisrt.Answer_author或{{Answer_set.all.0.Answer_author}}对了,我也是这样做的,但我想我错过了一些东西,现在重写并运行良好。谢谢你小心这个方法!它会导致已知的N+1问题:对于每个问题,您都会向数据库请求答案,这可能会导致性能问题!当然,如果有少量的问题,也没关系,只要记住N+1。。
{{question_instance.answer_set.all.0 }} # templates

question_instance.answer_set.first() # views
@property
def higher_answer(self):
    return self.answer_set.all().order_by('vote').last()