You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模型方法中如何筛选关联当前实例的结果对象

Django Quiz模型关联结果查询解答

筛选参数填写值

在Quiz的实例方法show_results中,filter的quiz参数直接传入self即可,self对应当前调用该方法的Quiz实例,匹配的就是所有关联到当前测验的ABCD结果记录。
补全后的方法代码:

class Quiz(models.Model):
    name = models.CharField(max_length=250)
    def show_results(self):
        return ABCD.objects.filter(quiz=self)

现有模型定义的逻辑错误

你当前使用OneToOneField建立Quiz和ABCD的关联是不符合业务需求的:

  • OneToOneField为一对一关系,数据库层面会强制约束1个Quiz实例只能绑定1条ABCD记录,根本无法实现「单个测验对应多份用户结果」的逻辑
  • 要匹配一对多的业务场景,需要将ABCD模型的关联字段替换为ForeignKey(外键,多对一关系),允许多个ABCD记录指向同一个Quiz实例,修正后的字段定义:
class ABCD(models.Model):
    # 替换OneToOneField为ForeignKey,可按需设置related_name自定义反向关联字段名
    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, related_name="results")
    points = models.IntegerField()

配置外键后,除了自定义的show_results方法,你也可以直接使用Django提供的反向关联能力查询结果:如果不设置related_name,反向访问字段为abcd_set,调用方式为当前quiz实例.abcd_set.all();如果像上面代码一样设置了related_name="results",直接调用当前quiz实例.results.all()就能拿到所有关联结果,不需要额外写自定义方法。


内容的提问来源于stack exchange,提问作者Shuvam Jaswal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:54:27