【问题标题】:Django (admin.e104) must inherit from 'InlineModelAdmin'Django (admin.e104) 必须继承自 'InlineModelAdmin'
【发布时间】:2019-10-24 10:31:43
【问题描述】:

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

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

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

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

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

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 中。 有什么线索吗? 谢谢。

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    我的愚蠢错误是我将内联类名放在引号内。

    代替:

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

    原来是:

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

    总成本:

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

    【讨论】:

    • 我也做了同样的事情。谢谢你的牺牲!
    【解决方案2】:

    找到原因了。 在最初不是我的实际代码中,模型的名称与它们所在的文件的名称相同。儿子在检查 Django(或 python)的某个步骤中检测到从 LocalProductModel 继承 RemoteProductModel 为错误 - 就像从文件继承,不是类模型。之后,它不能使用它的字段,当然 RemotePurchaseAdmin 不能像远程产品一样将导入作为模型进行内联。 它不会警告继承错误,但会为 admin.ModelAdmin 显示 admin.E104,它试图导入不正确的模型或内联。

    谢谢大家。希望这会警告其他开发人员不要犯愚蠢的错误。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-12-14
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多