0

我需要在 Multi Table Inheritance 和 ABC Inheritance 之间进行选择,我不确定是否仍然可以为每个子类设置单独的管理员。我需要每个子类管理屏幕中的所有基类字段和子类中的所有字段。

如果这是一个愚蠢的问题,我很抱歉,我什至还没有完成手册,但我有一个截止日期。

4

2 回答 2

1

当然,您可以为每个模型设置一个管理屏幕,并且基本模型中的所有字段都将出现在子模型上。

来自 django 文档

层次结构中的每个模型都是一个模型

然后,如果您有:

模型.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):
    [...]
于 2013-04-24T17:28:48.080 回答
1

无论哪种方式,您都会获得所有字段。两者的区别在于多表继承...

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可以在管理员中编辑的对象。

于 2013-04-24T17:26:19.537 回答