我如何得到一个特定子类的查询集?看起来不像通过related_name
就能得到答案。使用Django 3.2.6顺便说一句。
下面是我的设置:
class Quiz(models.Model):
name = # char field
class Question(models.Model):
# a quiz has many questions
quiz = models.ForeignKey(Quiz, related_name = '%(class)s')
# etc...
class TFQuestion(Question):
is_true = models.BooleanField(...)
class MCQuestion(Question):
n_choices = models.IntegerField(...)
我想要的是得到一个只是MC问题的查询集,并像这样处理它们。
我觉得有必要强调一下Question并不是抽象的。所以问题模型有它自己的related_name
,但是指定的'%(class)s'
模式似乎没有传播到子类。我看到的所有其他线程都建议使用这个模式,但是它只适用于抽象模型!在使用多表继承时不适用。
据我所知,我不能只是做:
quiz1 = Quiz.objects.get(id=1)
# this works; returns queryset of Question objects
allquestions = quiz1.question.all()
# doesn't work
all_mcqs = quiz1.mcquestion.all()
2条答案
按热度按时间gk7wooem1#
您可以使用以下命令**
.filter(…)
**[Django-doc]:为了继承一个具体的模型,Django会为
Question
,TFQuestion
和MCQuestion
创建三个表。MCQuestion
会有一个“隐藏的”OneToOneField
到Question
。rkue9o1l2#
自我回答(有点)
我见过一些变通方法,但比使用related_name更麻烦:
A.)使用的类名__为空:
B.)使用
InheritanceManager
和类名__为空: