我有几个应用程序通过ForeignKey
链接在一起,并且可以通过内联在单个页面上进行编辑。问题是虽然模型会正确保存,但内联对象却没有。
这是创建我的课程的地方,一个带有配音演员的角色,然后该角色为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)
在我的内联显示的情况下,内联已创建并正确显示,但在编辑时,不会与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
行来解决这个问题。
答案 0 :(得分:0)
这是一个老问题,但我想我会提到一些我发现的问题,因为我遇到了同样的问题(虽然它只是在我编辑了内联模板的样式后才发生的。)
我使用Firebug来检查页面,并使用默认模板stying,结果发现django隐藏了一个最终的空表单(建议的临时解决方案)。所以对我来说问题是我在所有内联表单所属的display: inline-block
类上设置了inline-related
(在django 1.6中)。为了解决这个问题,我在display: none
类上设置了empty-form
,只有最终的内联表单属于。{/ p>
我意识到你可能已经按照你在问题中提到的那样做了,但鉴于上述信息它可能更有意义,看起来像一个不那么“hacky”的解决方案。 希望这有帮助!