Django:使用inlineformset内联编辑相关模型
我仍然坚持在同一页面上对相关模型进行类似内联树的标识。 我有三种型号,A、B和CDjango:使用inlineformset内联编辑相关模型,django,django-admin,inline-formset,Django,Django Admin,Inline Formset,我仍然坚持在同一页面上对相关模型进行类似内联树的标识。 我有三种型号,A、B和C Class A Class B fb = foreignkey(A) Class C fc = foreignkey(B) 在admin.py中,我做了一些类似于 AdminA inlines = [inlineB] AdminB inlines = [inlineC] 我希望当我编辑/添加模型A时,我应该能够内联添加模型B,并添加模型B的相关模型C条目。我在尝试Inlin
Class A
Class B
fb = foreignkey(A)
Class C
fc = foreignkey(B)
在admin.py中,我做了一些类似于
AdminA
inlines = [inlineB]
AdminB
inlines = [inlineC]
我希望当我编辑/添加模型A时,我应该能够内联添加模型B,并添加模型B的相关模型C条目。我在尝试InlineFormset,但找不到如何将它们用于我的目的。而且,我发现。但再说一次,因为我是Django的新手,我不知道如何让它工作 回答你自己的问题有点奇怪,但是没有人站出来。感谢伯纳德为我指明了正确的方向。解决方案需要制作一个中介模型。我的情况是BC班
class A(models.Model):
a = models.IntegerField()
class B(models.Model):
fb = models.ForeignKey(A)
b = models.IntegerField()
class C(models.Model):
fc = models.ForeignKey(B)
c = models.IntegerField()
class BC(models.Model):
fc = models.ForeignKey(A)
fb = models.ForeignKey(B)
在模型A的管理中使用InlineB,而不是使用BC的inline。所以完整的admin.py看起来像
class InlineC(admin.TabularInline):
model = C
extra = 1
class BCInline(admin.TabularInline):
model = BC
extra = 1
class AdminA(admin.ModelAdmin):
fieldsets = [
(None, {
'fields': ('a',)
}),
]
inlines = [BCInline]
class AdminB(admin.ModelAdmin):
fieldsets = [
(None, {
'fields': ('b',)
}),
]
inlines = [InlineC]
瞧,我在模型A的添加页面上找到了popus创建B的完整对象的按钮。到目前为止,你到底尝试了什么?您在12小时前提出了一个相关问题,其中您说模型B仅定义了a和C之间的关系。我曾经对django tagging的模型进行过类似的设置,它基本上使用了
GenericInlineAdminForm
forTaggedItem
,它也主要定义了标记之间的关系,标记的对象和内容类型。然而,如果你只是提出一些抽象的问题,你就不能期望得到一个有用的答案。12小时前,是的,B是一个抽象类。但不再是了,我对班级做了一些改变。早些时候,我希望找到一些内置的解决方案,如弹出窗口,如果你想创建一个foreginkey对象。现在我尝试创建一种inlineformset类型的结构。所以在内联行中,我希望除了B字段之外,我能够添加C类对象的实例。因此,寻找使用modelforms、InlineFormset等定制表单集解决方案。事实上,我的问题与我提到的链接中的问题完全相同。你能告诉我解决方案的细节吗?请看一下。如果您为模型B定义InlineAdminForm,例如,从admin.TabularInline派生,您应该会得到一个表单显示,其中提供+-按钮,使您能够在弹出窗口中创建C的实例。如果不起作用,请检查外键。你链接的问题基本上对你的问题有合理的答案。谢谢你的回答。但我想你误解了这个问题。我需要从A的添加/编辑页面编辑/添加C实例。显然,模型B的编辑/添加C作为内联使用“+”,正如您所提到的。但这是一个树问题,在a的第页编辑C。我以一种抽象的方式编写了这个问题,以便抓住问题的要点,即添加a的一个新实例,同时添加B(及其C对象)。最初的问题有一个很好的解决方案,但很多部分都不完整,特别是因为它使用了较旧的django。一旦我弄明白了,我会发布一个完整的解决方案。不完全是。我的意思是在a的页面中以表格形式内联显示B,并且可以从B的内联显示中添加C的实例。在我的例子中,B是文章a的标签列表,带有选择框从现有标签中选择标签,以及创建和分配新标签的按钮(C)。然而,在A的页面中,C的内联显示——绕过B的任何显示——可能更难实现。在B和C模型中使用integerfield的目的是什么?这真的是弹出窗口吗?我不这么认为。