我需要在 Multi Table Inheritance 和 ABC Inheritance 之间进行选择,我不确定是否仍然可以为每个子类设置单独的管理员。我需要每个子类管理屏幕中的所有基类字段和子类中的所有字段。
如果这是一个愚蠢的问题,我很抱歉,我什至还没有完成手册,但我有一个截止日期。
当然,您可以为每个模型设置一个管理屏幕,并且基本模型中的所有字段都将出现在子模型上。
层次结构中的每个模型都是一个模型
然后,如果您有:
模型.py
class Service(models.Model):
owner = models.ForeignKey('auth.User')
name = models.CharField(max_length=128)
class VariationAService(Service):
# fields
class VariationBService(Service):
# more fields
你可以这样做:
管理员.py
class ServiceAdmin(admin.ModelAdmin):
[...]
class VariationAServiceAdmin(admin.ModelAdmin):
[...]
class VariationBServiceAdmin(admin.ModelAdmin):
[...]
无论哪种方式,您都会获得所有字段。两者的区别在于多表继承...
class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
class Restaurant(Place):
serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField()
...您将同时获得一个Place
对象和Restaurant
对象,它们都可以在管理员中进行编辑,但具有抽象基类...
class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
class Meta:
abstract = True
class Restaurant(Place):
serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField()
...你只会得到一个Restaurant
可以在管理员中编辑的对象。