添加/编辑多个子类型的最佳解决方案是什么。
例如,父类(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/