Django内联不保存

时间:2014-03-19 17:53:16

标签: python django admin inline models

我有几个应用程序通过ForeignKey链接在一起,并且可以通过内联在单个页面上进行编辑。问题是虽然模型会正确保存,但内联对象却没有。

人/ models.py

这是创建我的课程的地方,一个带有配音演员的角色,然后该角色为ForeignKey一个节目。

from django.db import models

class VoiceActor(models.Model):   
   first_name     =     models.CharField(max_length=200)
   last_name      =     models.CharField(max_length=200, blank=True)

class Characters(models.Model):
   first_name     =     models.CharField(max_length=200)
   last_name      =     models.CharField(max_length=200, blank=True)
   voice_actor    =     models.ManyToManyField(VoiceActor, blank=True)

class ShowCharacters(models.Model):
   show           =     models.ForeignKey('info.Show')
   character      =     models.ForeignKey(Characters)
   role           =     models.ForeignKey('metadata.Roles', blank=True)

方式/ admin.py

在我的内联显示的情况下,内联已创建并正确显示,但在编辑时,不会与Show模型一起保存。

from django.contrib import admin
from info.models import *
from people.models import *

class CharactersInline(admin.TabularInline):
   model = ShowCharacters
   extra = 0

class ShowAdmin(admin.ModelAdmin):
   fieldsets = (...)
   inlines = [CharactersInline]

admin.site.register(Show, ShowAdmin)

我有大约四个与上面类似的不同内联,并且在info应用程序本身内部处理了两个内联,但它仍然无法保存。

编辑:从我发现的内容可能是formset_save未被调用的内容。虽然不太确定如何强迫它。

任何帮助或批评都表示赞赏,这可能是处理此问题的错误方法。谢谢!

编辑2 因此,在使用#Django IRC查看后,我将CharactersInline更改为extra = 1。这导致显示两个字段。我尝试编辑两个并且第一个字段成功保存,而第二个字段没有。

仔细研究一下,我注意到该模板使用<tr>呈现第一个id='episodelist_set-0'(保存的那个),第二个使用id='episodelist_set-empty'呈现。现在我可以通过隐藏CSS中的set-empty行来解决这个问题。

1 个答案:

答案 0 :(得分:0)

这是一个老问题,但我想我会提到一些我发现的问题,因为我遇到了同样的问题(虽然它只是在我编辑了内联模板的样式后才发生的。)

我使用Firebug来检查页面,并使用默认模板stying,结果发现django隐藏了一个最终的空表单(建议的临时解决方案)。所以对我来说问题是我在所有内联表单所属的display: inline-block类上设置了inline-related(在django 1.6中)。为了解决这个问题,我在display: none类上设置了empty-form,只有最终的内联表单属于。{/ p>

我意识到你可能已经按照你在问题中提到的那样做了,但鉴于上述信息它可能更有意义,看起来像一个不那么“hacky”的解决方案。 希望这有帮助!