Django(admin.e104)必须继承自'InlineModelAdmin'

时间:2019-06-10 00:31:33

标签: django django-admin

尝试将某些模型作为内联放置在其他两个模型中会产生一些奇怪的错误(标题)。

我有两种订购模式-远程和本地。而且我需要在每个产品中插入数量不限的产品。另一个目的是在不同列表中显示本地和远程订购的产品的完整列表。

第二个目标的解决方案:使用从第一个继承的产品的第二个模型及其自己的管理者(对象)。

第一个目标的解决方案:在订单的管理类中使用内联命令以按顺序附加完全正确的产品(本地产品到本地订单,远程产品到远程订单)。

将本地产品的内联添加到本地购买的管理中很好。 但是将远程产品的内联添加到远程订单的管理文件的内联字段中会返回远程订单管理类的错误:

must inherit from 'InlineModelAdmin'.

即使从本地订单的管理文件中删除了内联,它也返回错误。

像这样的一些代码 在models.py中:

class RemotePurchaseModel(models.Model):
    title = models.CharField
    number = models.IntegerField
    ...

class LocalPurchaseModel(models.Model):
    title = models.CharField
    number = models.IntegerField
    ...

class LocalProductModel(models.Model):
    remote = models.BooleanField(default=False)
    actual_order = models.ForeignKey(to=LocalPurchaseModel, blank=True, null=True)
    remote_purchase = models.ForeignKey(to=RemotePurchaseModel, blank=True, null=True)
    ...

class RemoteProductManager(djando.db.models.Manager):
    def get_queryset(self):
        return super(PurchasedProductManager, self).get_queryset().filter(remote=True)

class RemoteProductModel(LocalProduct):
    proxy = True
    objects = RemoteProductManager
    ...

...

在admin.py

from .models import LocalProductModel
from .models import RemoteProductModel
from .models import LocalPurchaseModel
from .models import RemotePurchaseModel
from django.contrib import admin

class LocalProductInline(admin.StackedInline):
    model = LocalProductModel
    extra = 1

class RemoteProductInline(admin.StackedInline):
    model = RemoteProductModel
    extra = 1

class LocalPurchaseAdmin(admin.ModelAdmin):
    list_display = ...
    fields = ...
    inlines = (LocalProductInline, )

class RemotePurchaseAdmin(admin.ModelAdmin):
    list_display = ...
    fields = ...
    inlines = (RemoteProductInline, )

...
admin.site.register(LocalPurchaseModel, LocalPurchaseAdmin)
admin.site.register(RemotePurchaseModel, RemotePurchaseAdmin)

此变化的原因也是两个在管理员端显示了本地和远程产品的不同字段集。当然,所有字段都存在于LocalProductModel中。 有什么线索吗? 谢谢。

3 个答案:

答案 0 :(得分:0)

找到原因。 在实际的代码中(并非最初属于我的),模型的名称与它们所放置的文件的名称相同。在检查Django(或python)的某个步骤中,儿子检测到LocalProductModel的RemoteProductModel继承为错误-例如从文件的继承,不是类模型。此后,它就不能与它的字段一起使用,当然,如果是远程产品,RemotePurchaseAdmin无法像模型一样直接进行导入。 它不会警告继承错误,但会为试图导入不正确的模型或内联的admin.ModelAdmin升级admin.E104。

谢谢大家。希望这能警告其他开发人员避免愚蠢的错误。

答案 1 :(得分:0)

我的愚蠢错误是我在引号内使用了内联类名。

代替:

class MyAdmin(admin.ModelAdmin):
    inlines = [MyInlineAdmin]

是:

class MyAdmin(admin.ModelAdmin):
    inlines = ['MyInlineAdmin']

总费用:

  • 2小时
  • 笔记本电脑屏幕上有一些划痕
  • 今天少在海里游泳

答案 2 :(得分:0)

是的,问题是型号名称已更改,我解决了运行makemigrationsmigrate