用 prefetch_related 过滤
filter with prefetch_related
我想知道如何过滤我的 def 以仅查看过滤后患者的问题。
我试过这个:
def detail3(request, patient_id):
patient = get_object_or_404(Patient, pk=patient_id)
questions = Question.objects.filter(patient=patient_id).prefetch_related('reply_set').all().order_by('pub_date')
return render_to_response('PQR/detail3.html', {'questions_list': questions, 'patient': patient })
patient=patient_id => 当我使用我的模板开始我的视图时,我得到了这个结果:
"Cannot resolve keyword 'patient' into field."
我不知道为什么会发生此错误,因为当我尝试使用相同参数 (patient=patient_id) 的另一个解决方案时,我没有问题!
def detail2(request, patient_id):
tab_replies = []
patient = get_object_or_404(Patient, pk=patient_id)
questions = Question.objects.all().order_by('pub_date')
for question in questions:
tab_replies.append(question.reply_set.filter(patient=patient_id))
replies_per_question = zip(questions, tab_replies)
return render_to_response('PQR/index.html', {'questions_list': replies_per_question, 'patient': patient })
那么用 patient_id 和方法 prefetch_related 过滤我的问题的解决方案是什么?
谢谢你的帮助!
这是我的 models.py
class Patient(models.Model):
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name + ' [' + str(self.id) + ']'
def listReply(self):
replies = Reply.objects.filter(patient= self.id)
return replies
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __unicode__(self):
return self.question_text
class Reply(models.Model):
question = models.ForeignKey(Question)
patient = models.ForeignKey(Patient)
reply_text = models.CharField(max_length=200)
def __unicode__(self):
return str(self.reply_text)
您正在尝试按 Question
模型中不存在的字段进行过滤:
Question.objects.filter(patient=patient_id)
患者不是 Question
字段,这就是您收到此错误的原因。
在您的 Reply
模型中,将 related_name
属性 添加到问题字段:
question = models.ForeignKey(Question, related_name="replies")
然后您可以通过以下操作查询具有特定患者回复的问题列表:
Question.objects.filter(replies__patient=patient_id)
我想知道如何过滤我的 def 以仅查看过滤后患者的问题。
我试过这个:
def detail3(request, patient_id):
patient = get_object_or_404(Patient, pk=patient_id)
questions = Question.objects.filter(patient=patient_id).prefetch_related('reply_set').all().order_by('pub_date')
return render_to_response('PQR/detail3.html', {'questions_list': questions, 'patient': patient })
patient=patient_id => 当我使用我的模板开始我的视图时,我得到了这个结果:
"Cannot resolve keyword 'patient' into field."
我不知道为什么会发生此错误,因为当我尝试使用相同参数 (patient=patient_id) 的另一个解决方案时,我没有问题!
def detail2(request, patient_id):
tab_replies = []
patient = get_object_or_404(Patient, pk=patient_id)
questions = Question.objects.all().order_by('pub_date')
for question in questions:
tab_replies.append(question.reply_set.filter(patient=patient_id))
replies_per_question = zip(questions, tab_replies)
return render_to_response('PQR/index.html', {'questions_list': replies_per_question, 'patient': patient })
那么用 patient_id 和方法 prefetch_related 过滤我的问题的解决方案是什么? 谢谢你的帮助!
这是我的 models.py
class Patient(models.Model):
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name + ' [' + str(self.id) + ']'
def listReply(self):
replies = Reply.objects.filter(patient= self.id)
return replies
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __unicode__(self):
return self.question_text
class Reply(models.Model):
question = models.ForeignKey(Question)
patient = models.ForeignKey(Patient)
reply_text = models.CharField(max_length=200)
def __unicode__(self):
return str(self.reply_text)
您正在尝试按 Question
模型中不存在的字段进行过滤:
Question.objects.filter(patient=patient_id)
患者不是 Question
字段,这就是您收到此错误的原因。
在您的 Reply
模型中,将 related_name
属性 添加到问题字段:
question = models.ForeignKey(Question, related_name="replies")
然后您可以通过以下操作查询具有特定患者回复的问题列表:
Question.objects.filter(replies__patient=patient_id)