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

解决Django中'ManyToOneRel'对象无'verbose_name'属性的报错

问题解决:Django获取模型字段verbose_name时的AttributeError

问题原因

Category._meta.get_fields()方法默认会返回模型的所有关联对象,包括反向关联关系(比如MasterList中指向Category的外键,会在Category的_meta中生成一个ManyToOneRel类型的反向关联对象)。这类关系对象不属于普通字段,没有verbose_name属性,遍历取值时就会触发AttributeError。

解决方案

方案1:限制只获取当前模型的显式字段

调用get_fields()时传入参数,排除父类继承的字段和隐藏的关联字段:

model_fields = [(f.verbose_name, f.name) for f in Category._meta.get_fields(include_parents=False, include_hidden=False)]

方案2:过滤出真正的字段对象

通过类型判断,只保留django.db.models.Field的实例:

from django.db.models import Field

model_fields = [(f.verbose_name, f.name) for f in Category._meta.get_fields() if isinstance(f, Field)]

说明

  • 方案1更高效,直接通过参数限制返回结果,适合只需要当前模型自身定义字段的场景;
  • 方案2更灵活,可根据需求调整过滤条件,比如需要保留部分关联字段时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:55:22