【问题标题】:How to overcome error: 'ManyToOneRel' object has no attribute 'verbose_name' in Django application如何克服错误:\'ManyToOneRel\' 对象在 Django 应用程序中没有属性 \'verbose_name\'
【发布时间】:2022-11-28 17:19:13
【问题描述】:

在我的应用程序中,我有以下模型:

class Category(BaseStampModel):
    cat_id = models.AutoField(primary_key=True, verbose_name='Cat Id')
    category = models.CharField(max_length=55, verbose_name='Category')

class MasterList(BaseStampModel):
    master_list_id = models.AutoField(primary_key=True, verbose_name='Master List Id')
    mast_list_category = models.ForeignKey(Category, on_delete=models.CASCADE, null=True, verbose_name='Category')
    # Other fields ...

我的 BaseModel 看起来像这样:

class BaseStampModel(models.Model):
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='%(class)s_created', blank=True, null=True, on_delete=models.SET_NULL, verbose_name='Created by')
    created_on = models.DateTimeField(auto_now_add = True, null=True, blank=True)

这样我就可以显示模型对象并创建/更新实例。

在我看来,当我想从模型中检索 verbose_name 时“类别“ 使用:

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

我的浏览器出现以下错误:

AttributeError: 'ManyToOneRel' 对象没有属性 'verbose_name'

如果我从字段 mast_list_category 中删除 FK 关系(使其成为简单的 CharField),我不会收到错误。

经历了数百万页,但还没有解决办法。

任何帮助非常感谢。

【问题讨论】:

    标签: django django-models attributeerror many-to-one


    【解决方案1】:

    您无法访问详细名称就像访问模型字段一样

    但是有不同的获取方式详细名称.更好的方法是使用get_field

    model._meta.get_field(field_name).verbose_name
    

    在您的情况下,将 model 替换为 Category 并将 field_name 替换为您想要获取的字段详细名称

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 2011-12-27
      • 2017-01-22
      • 2015-06-02
      • 2020-12-11
      • 2015-05-01
      • 2019-12-04
      相关资源
      最近更新 更多