为什么模型在管理 Django 中有父类名称

问题描述

我已经创建了这样的模型

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 中将所有模型名称都设为用户?而不是工人和供应商?

enter image description here

解决方法

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

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

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'
,

他们可能会使用 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',choices=ACCOUNT_TYPE)

    class Meta: 
        verbose_name = 'Worker'

我从这个 article 得到它。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...