我有以下型号
class Question(db.Model):
userid = db.CharField(max_length=50)
posted = db.DateTimeField(auto_now=True)
question = db.TextField(max_length=500)
qid = db.AutoField(primary_key=True)
title = db.TextField(max_length=80)
class Question_tags(db.Model):
tag = db.ForeignKey('Tags')
ques = db.ForeignKey('Question')
class Tags(db.Model):
tid = db.AutoField(primary_key=True)
tagname = db.CharField(max_length=30)
tag_cnt = db.IntegerField()
我需要加入3个模型,即Question,Tags和Question_tags,并获得以下字段问题,标题,标记名和tag_cnt。我尝试使用select_related(),但是我收到的错误就像“queryset不包含对象select_related”...有关如何继续的任何想法吗?
答案 0 :(得分:2)
ManyToManyField
;这与您使用Question_tags
所做的完全相同,但更方便。我不知道你想要什么样的查询(请发一些代码......),但这里有一些例子可以澄清你需要知道的内容:
Question.objects.get(pk=some_question_id).question_tags_set.all()
# get all tags of a specific `Question`
Tags.objects.get(tagname="some_tag").question_tags_set.all()
# all questions of a specific `Tag`
修改强>:
要更改ManyToManyField
的模型,请使用:
class Tags(db.Model):
tid = db.AutoField(primary_key=True)
tagname = db.CharField(max_length=30)
tag_cnt = db.IntegerField()
class Question(db.Model):
userid = db.CharField(max_length=50)
posted = db.DateTimeField(auto_now=True)
question = db.TextField(max_length=500)
qid = db.AutoField(primary_key=True)
title = db.TextField(max_length=80)
tags = db.ManyToManyField(Tags)
你可以得到这样的值:
Question.objects.get(pk=123).tags.all()
Tags.objects.get(tagname="mytag").question_set.all()
# to count tags for every Question
from django.db.models import Count
Question.objects.all().annotate(num_tags=Count("tags"))
答案 1 :(得分:0)
我假设您要访问Question_tags
对象中的Tags
和Question
个对象,这意味着您必须关注foreign key relationship backwards。
question = Question.objects.get(pk=1)
question_tags = question.question_tags_set.all()
如果您不想通过FOO_set
访问对象,可以在模型中的字段上设置related_name
:
class Question_tags(db.Model):
tag = db.ForeignKey('Tags', related_name="my_tag_objects")
ques = db.ForeignKey('Question')
然而,如果你的模型是这样的,我认为你的Question_tags
模型是多余的,可以用Question
中的ManyToManyField
代替。