我有两个模型Quiz和ABCDABCD使用一对一字段连接到测试测验模型将用于存储测验,ABCD是用于为用户存储结果的模型一个测验将连接多个ABCD(一个测验将有多个结果)在Quiz模型中,我想要一个方法,它将返回该测验的所有结果(ABCD对象将该测验作为其测验字段)我应该写什么来过滤ABCD与该测验
class Quiz(models.Model):
name=models.CharField(max_length=250)
def show_results(self):
return ABCD.objects.filter(quiz=what to write here)
class ABCD(models.Model):
quiz=models.OneToOneField(Quiz,on_delete=models.CASCADE)
points=models.IntegerField()
您不需要使用模型过滤器来获取连接到Quiz的abcd, Django会自动创建一个related_name(如果您喜欢不同的名称,您可以在字段中指定一个)。您可以通过以下方式访问它:
def show_results(self):
return self.abcd_set.all()
你真的不需要一个'show_result'方法,但这取决于你。
在一个相关的注意事项上,你的模型关系是一对一的,当我相信你想要使用多对一或models.ForeignKey
字段。一对一的访问器就是quiz.abcd
因为只有一个!
如果一个测验将有多重ABCD,您应该将OneToOneField更改为ForeignKey:
class ABCD(models.Model):
quiz=models.ForeignKey(Quiz,on_delete=models.CASCADE)
points=models.IntegerField()
then with instance of Quiz model:
quiz = Quiz.objects.get(pk=1) // for example
queryset ABCD所有对象,这个测验foreignkey:
quiz.abcd_set.all()