Django 自定义字段没有属性“set_attributes_from_name”

Posted

技术标签:

【中文标题】Django 自定义字段没有属性“set_attributes_from_name”【英文标题】:Django custom field has no attribute 'set_attributes_from_name' 【发布时间】:2022-01-23 22:11:36 【问题描述】:

我有一个自定义字段可以将输入日期转换为以年为单位的时间增量,四舍五入:

class CustomField(models.Model):
    start_date = models.DateField()

    def days_to_years(self, date: timedelta):
        return math.ceil(date.days / 365)

    def save(self, *args, **kwargs):
        delta = datetime.today() - self.start_date
        self.start_date = math.ceil(delta.days / 365)
        super(CustomField, self).save(*args, **kwargs)

我在以下模型中使用:

from django.contrib.postgres.fields import ArrayField

class Component(ComponentBase):
    years = ArrayField(
            CustomField()
    )

当我尝试进行迁移时,会引发错误 AttributeError: 'CustomField' object has no attribute 'set_attributes_from_name,我似乎无法调试它,因为我对 Django 还很陌生。任何建议都会非常受欢迎:)。

【问题讨论】:

【参考方案1】:

如果您想要自己的自定义字段,它应该是 models.Field 的子类,而不是 models.Model。

【讨论】:

没用。它搞砸了迁移,我不得不恢复..

以上是关于Django 自定义字段没有属性“set_attributes_from_name”的主要内容,如果未能解决你的问题,请参考以下文章

Django 自定义字段没有属性“set_attributes_from_name”

在 Django 中使用自定义字段扩展用户模型

python Django:autocomplete-light添加自定义属性以选择和预填充其他字段

模型表单上的 Django 自定义设置大小属性不起作用

如何在 django 模型表单中添加自定义字段?

如何允许在 Django 管理员中通过自定义 list_display 字段进行排序,该字段没有 DB 字段,也没有可注释