为啥模型在管理员 Django 中有父类名

Posted

技术标签:

【中文标题】为啥模型在管理员 Django 中有父类名【英文标题】:Why are models having there parent class names in admin Django为什么模型在管理员 Django 中有父类名 【发布时间】:2021-04-07 15:13:41 【问题描述】:

我已经创建了这样的模型

class User(AbstractUser):
    login_count = models.PositiveIntegerField(default=0)

class Supplier(User):
    company_name= models.CharField(max_length=30)
    company_domain=models.CharField(max_length=30)
    

class Worker(User):
    ACCOUNT_TYPE = (
        ('1', 'Admin'),
        ('2', 'Regular'),
    )
    account_type = models.CharField(max_length=1, choices=ACCOUNT_TYPE)

在 users.admin.py 中,我有

admin.site.register(Supplier)
admin.site.register(Worker)

为什么我在 Django Admin 中将所有模型名称都设置为用户?而不是工人和供应商?

【问题讨论】:

【参考方案1】:

因为AbstractUser 是一个抽象模型,所以它的Meta 类被所有子类docs 继承。

您需要为每个模型提供自己的Meta 类并传递verbose_nameverbose_name_plural 属性以覆盖AbstractUsers Meta 类中设置的值

class Supplier(User):
    company_name = models.CharField(max_length=30)
    company_domain = models.CharField(max_length=30)

    class Meta:
        verbose_name = 'supplier'
        verbose_name_plural = 'suppliers'


class Worker(User):
    ACCOUNT_TYPE = (
        ('1', 'Admin'),
        ('2', 'Regular'),
    )
    account_type = models.CharField(max_length=1, choices=ACCOUNT_TYPE)

    class Meta:
        verbose_name = 'worker'
        verbose_name_plural = 'workers'

【讨论】:

【参考方案2】:

他们可能使用了 User 类的详细名称,因为它们都继承自它。 尝试这样修改:

class Supplier(User):
    company_name= models.CharField(max_length=30)
    company_domain=models.CharField(max_length=30)

    class Meta: 
        verbose_name = 'Supplier'

class Worker(User):
    ACCOUNT_TYPE = (
        ('1', 'Admin'),
        ('2', 'Regular'),
    )
    account_type = models.CharField(max_length=1, choices=ACCOUNT_TYPE)

    class Meta: 
        verbose_name = 'Worker'

我从这个article得到它。

【讨论】:

以上是关于为啥模型在管理员 Django 中有父类名的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Django 管理员的 save() 覆盖中将站点添加到对象似乎不起作用?

19 01 15 django 数据库设计模型 管理站点 注意:在引入外键在django 2以上改版

特定模型的 Django 管理自定义模板

在 django 管理模型列表中,为方法的返回值显示“是/否”

在 Django Admin 中有 Jcrop 的缩略图吗?

Django:过滤管理模板中的空模型条目