如何在 Django get_context_data 方法中访问模型的外国座位的元素?
Posted
技术标签:
【中文标题】如何在 Django get_context_data 方法中访问模型的外国座位的元素?【英文标题】:How can I access the elements of a foreign set for a model in Django's get_context_data method? 【发布时间】:2016-06-15 23:47:42 【问题描述】:我在 Django 1.9.7 中有一个通用的 DetailView
,它使用我的模型 Quiz
来显示一个超级省时的无障碍视图(感谢 Django)。但是,我很难访问我的Quiz
对象(一组QuizQuestion
对象)上的相关外键集。我的模型如下:
class QuizQuestion(models.Model):
quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
question_index = models.IntegerField()
user_answer_text = models.CharField(max_length=1000)
date_answered = models.DateTimeField(null=True)
user_is_correct = models.NullBooleanField()
def __str__(self):
return self.user_answer_text
这是我的观点:
class QuizDetail(generic.DetailView):
model = Quiz
def get_context_data(self, **kwargs):
context = super(QuizDetail, self).get_context_data(**kwargs)
# Pass/fail chart
passed_questions = self.model.quizquestion_set.objects.filter(user_is_correct=True)
# ...
return context
这给了我'ReverseManyToOneDescriptor'对象没有属性'objects'。
我不确定尝试使用_set
获取相关对象是否比长途跋涉并要求QuizQuestion.objects.filter(...)
更可取,但我在此基础上进行操作。如果我弄错了,请纠正我:)
self.model.quizquestion_set.filter(user_is_correct=True)
给出:''ReverseManyToOneDescriptor' 对象没有属性'filter''
passed_questions = self.model.quizquestion_set.all()
给出 'ReverseManyToOneDescriptor' 对象没有属性 'all'
附注我发现很明显我对 Django 比较陌生 - 为任何愚蠢的错误道歉。
【问题讨论】:
请同时添加您的型号 【参考方案1】:您指的是 model,您需要引用 instance(视图为其显示详细信息的对象),因为关系用于实例而不是楷模。你可以通过self.get_object()
获取实例:
def get_context_data(self, **kwargs):
context = super(QuizDetail, self).get_context_data(**kwargs)
obj = self.get_object()
passed_questions = obj.quizquestion_set.filter(...)
return context
【讨论】:
以上是关于如何在 Django get_context_data 方法中访问模型的外国座位的元素?的主要内容,如果未能解决你的问题,请参考以下文章
Django:如何告诉 Django 它应该在哪里寻找应用程序?
如何在双连接关系之后在 Django 中执行查询(或:如何绕过 Django 对多对多“通过”模型的限制?)