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

Django:修复QuerySet调用@property报错并实现属性条件过滤

修复Django模型中QuerySet无star属性的错误

错误原因

你用filter()获取父级对象时,返回的是QuerySet集合,而非单个Individus实例,集合本身没有定义star属性,所以会抛出'QuerySet' object has no attribute 'star'错误。

修复方案

把获取父对象的方式从filter()改为first()(如果codeid是唯一标识,也可以用get(),但first()能避免因对象不存在抛出异常),同时增加对象存在性判断,确保安全访问star属性。

修改后的代码示例:

@property
def star(self):
    # 用exists()直接判断查询是否有结果,比原写法更高效
    return Evenements.objects.filter(eventtype=93, xrefindividuproprio=self).exists()

@property
def star_descendant(self):
    # 获取父亲对象,不存在则返回None
    father = Individus.objects.filter(codeid=self.xrefpere_id).first()
    if father and father.star:
        return father
    
    # 补充母亲的判断逻辑(原代码未完成,这里补上)
    mother = Individus.objects.filter(codeid=self.xrefmere_id).first()
    if mother and mother.star:
        return mother
    
    # 都不满足时返回None或其他默认值
    return None

关键改动说明

  • 替换filter()为first():返回QuerySet中的第一个匹配对象,无匹配则返回None,避免直接操作集合导致的属性错误。
  • 增加存在性判断:先确认father/mother不为空,再访问star属性,防止None对象调用属性引发新异常。
  • 简化star属性逻辑:用exists()直接判断查询是否有结果,比原写法更高效简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:10:47