我有这个模特课:
class question(models.Model):
id = models.CharField(max_length=64, primary_key=True,null=False)
paper_id = models.ForeignKey(paper,null=True)
question_no = models.SmallIntegerField('question_no',max_length=6,null=True)
content = models.TextField('content',null=False)
topic_id = models.ForeignKey(topic,null=True)
subtopic_id = models.ForeignKey(subtopic,null=True)
std_answer = models.CharField(max_length=128,null=True)
marks = models.IntegerField('marks',max_length=2,null=True)
input = models.CharField(max_length=512,null=True,default=None)
type_answer = models.CharField(max_length=512,null=True)
type = models.CharField(max_length=512,null=True,default=None)
def __str__(self):
return str(self.id)
我需要列出它的所有属性,包括Topic.Title,Subtopic.Title和Paper.Title,它们分别位于外来对象Topic,Subtopic,Paper中。我怎么能在一个查询中这样做?
答案 0 :(得分:0)
要根据外键属性进行过滤,请使用FK模型名称后跟双下划线,然后使用属性名称:
query = question.objects.filter(topic_id__title="foobar")
要轻松创建复杂查询,请使用Q objects。
答案 1 :(得分:0)
你的models.py必须是这样的:例如:
class Topic(models.Model):
.....
class SubTopic(models.Model)
topic = models.ForeignKey(Topic)
.....
class question(models.Model):
question_no = models.SmallIntegerField('question_no',max_length=6,null=True)
content = models.TextField('content',null=False)
subtopic = models.ForeignKey(Subtopic)
.....
你不必放id,因为django会为你创建它。
views.py
def page(request):
return render(request, 'page.html', {
'topics' : topic.objects.filter()
}
if you want to get by id
def page(request, id):
topics = topic.objects.get(pk=id)
return render(request, 'page.html', {
'topics' : topic
}
您的模型类不正确。你不必放很多外键。一个外键就可以了。
{% for topic in topics %}
{{topic.title}}
{% for subtopic in topic.subtopics %}
{{subtopic.title}}
{% for question in subtopic.questions %}
............
{% endfor %}
{% endfor %}
{% endfor %}