添加/编辑多个子类型的最佳解决方案是什么。
例如超类型类与子类型客户端和子类型类供应商联系。此处显示的方式有效,但是当您编辑联系人时,您将获得两个内联,即子类型客户端和子类型供应商。
因此,即使您只想添加客户,您也可以获得供应商的字段,反之亦然。如果添加第三个子类型,则会获得三个子类型字段组,而实际上只需要一个子类型组,在上述示例中:客户端。
E.g:
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):
...
现在,当我想添加客户端时,即只有客户端我编辑联系人,我获得了客户和供应商的内联。对于供应商来说当然也是如此。
有没有办法避免这种情况?当我想添加/编辑客户时,我只看到Inline for Client,当我想添加/编辑我只看到供应商内联的供应商时,添加/编辑联系人?
或者也许有不同的方法。任何帮助或建议将不胜感激。
答案 0 :(得分:0)
如果不是使用一对一的外键来代替您继承的话,该怎么办?
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)
然后您可以注册客户和供应商,他们将共享来自联系人的字段,但仍然是彼此分开的。