Django Admin:多表继承子模型,通过内联多对多失败"请更正下面的错误"

时间:2018-06-15 11:32:01

标签: python django django-models django-admin

我不确定这是否是我的错误,限制或错误,但我想得到反馈,如果有解决方案或解决此问题...

在Django Admin中,我创建了一个基于'到'的多对多内联。模型ReleaseCardCount。内联链接到父类Card,父类用于许多子模型。在Django Admin中,我只对配置Card的子类感兴趣,例如,ActionCard

如果我为父Card模型和内联ReleaseCardCount配置Django Admin,我可以毫无问题地添加,删除和修改父对象和内联对象。如果我为卡的子对象配置相同的设置,例如ActionCard,我可以添加内联对象(如果没有)或删除所有内联对象,但我无法修改ActionCard或者如果内联存在,则为内联对象。如果存在内联对象并且我尝试修改并保存任何数据,我会得到一个"请更正下面的错误"消息,没有错误。

我已将重新创建问题所需的代码最小化到以下内容...

models.py:

from django.db import models

class Release2(models.Model):
    release_id = models.AutoField(primary_key=True)
    release_name = models.CharField(max_length=100)

    def __str__(self):
        return self.release_name

class Card2(models.Model):
    card_id = models.AutoField(primary_key=True) 
    card_name = models.CharField(max_length=100)
    release_card_count = models.ManyToManyField( Release2, through='ReleaseCardCount2',)

    def __str__(self):
        return self.card_name

class ReleaseCardCount2(models.Model):
    rcc_id = models.AutoField(primary_key=True)
    rcc_release = models.ForeignKey(Release2, on_delete=models.CASCADE)
    rcc_card = models.ForeignKey(Card2, on_delete=models.CASCADE)
    rcc_count = models.PositiveIntegerField(default=1, null=True, blank=True)

class ActionCard2(Card2):
    action_card_id = models.AutoField(primary_key=True)
    action_name = models.CharField(max_length=100)

    def __str__(self):
        return self.card_name

admin.py:

from .models import (Release2, Card2, ReleaseCardCount2, ActionCard2)

class ReleaseCardCount2InLine(admin.TabularInline):
    model = ReleaseCardCount2
    extra = 1

class Card2Admin(admin.ModelAdmin):
    inlines = (ReleaseCardCount2InLine,)
    model = Card2

class ActionCard2Admin(admin.ModelAdmin):
    inlines = (ReleaseCardCount2InLine,)
    model = ActionCard2

admin.site.register(Release2)
admin.site.register(Card2, Card2Admin)
admin.site.register(ActionCard2, ActionCard2Admin)

有趣的是,在我的故障排除中,我在开发环境中删除并重新创建了数据库。我发现其中一个以前没有工作的儿童模特突然开始工作了。我怀疑,这是因为我是第一个使用内联配置Django Admin的子模型。要使用上述代码重新创建问题,您可能需要尝试在父Card模型上运行 FIRST 。在Card添加,保存然后修改并保存内联对象后,您可以在ActionCard上尝试。

相关环境信息:

  • Django - 2.0.6
  • Python - 3.6.4
  • PostgreSQL - 10.4

0 个答案:

没有答案