django - 如何在 Django admin 中处理一种父类(super class)型的多个子类型

标签 django django-admin inlines

添加/编辑多个子类型的最佳解决方案是什么。

例如,父类(super class)型类 Contact 与子类型类 Client 和子类型类Supplier。这里显示的方式是有效的,但是当您编辑联系人时,您会获得两个内联,即子类型客户和子类型供应商。

因此,即使您只想添加客户,您也会获得供应商的字段,反之亦然。如果添加第三个子类型,您将获得三个子类型字段组,而实际上您只需要一个子类型组,在上述示例中:客户端。

例如:

class Contact(models.Model):
    contact_name = models.CharField(max_length=128)

class Client(models.Model):
    contact = models.OneToOneField(Contact, primary_key=True)
    user_name = models.CharField(max_length=128)

class Supplier(models.Model):
    contact.OneToOneField(Contact, primary_key=True)
    company_name = models.CharField(max_length=128)

在 admin.py 中

class ClientInline(admin.StackedInline):
    model = Client

class SupplierInline(admin.StackedInline):
    model = Supplier

class ContactAdmin(admin.ModelAdmin):
    inlines = (ClientInline, SupplierInline,)

class ClientAdmin(admin.ModelAdmin):
    ...

class SupplierAdmin(admin.ModelAdmin):
    ...

现在,当我想添加一个客户(即仅一个客户)时,我编辑联系人并获得客户和供应商的内联。当然,供应商也是如此。

有办法避免这种情况吗?当我想添加/编辑客户时,我只能看到内联的客户,当我想添加/编辑供应商时,我只能看到内联的供应商,在添加/编辑联系人时?

或者也许有不同的方法。任何帮助或建议将不胜感激。

最佳答案

如果不使用从它继承的一对一外键来联系您会怎么样?

class Contact(models.Model):
    contact_name = models.CharField(max_length=128)

    class Meta:
        abstract=True # Don't use this line if you want Contact to have its own table

class Client(Contact):
    user_name = models.CharField(max_length=128)

class Supplier(Contact):
    company_name = models.CharField(max_length=128)

然后您可以注册客户和供应商,他们将共享联系人中的字段,但仍然彼此分开。

关于django - 如何在 Django admin 中处理一种父类(super class)型的多个子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2444673/

相关文章:

python - 为什么我用sqlite的时候django需要psycopg2?

django - 使用 docker compose,如何使用相同的地址在内部和外部访问服务?

django - 如何向 Django 管理添加自定义功能?

python - 如何限制对 django 中特定行的访问

django - 是否可以使用 Django 在另一个 StackedInline 中嵌入一个 StackedInline?

django - 如何在我的 Django 博客中添加类别

python - Django auth 中间件的一些内部结构

django-admin - django 中的多态内联模型形式

python - Django Inlines 用户权限+仅查看 - 权限问题

python - 1.2.x 中的 Django ManyToMany 内联排序