Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:使用inlineformset内联编辑相关模型_Django_Django Admin_Inline Formset - Fatal编程技术网

Django:使用inlineformset内联编辑相关模型

Django:使用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

我仍然坚持在同一页面上对相关模型进行类似内联树的标识。 我有三种型号,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条目。我在尝试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
for
TaggedItem
,它也主要定义了标记之间的关系,标记的对象和内容类型。然而,如果你只是提出一些抽象的问题,你就不能期望得到一个有用的答案。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的目的是什么?这真的是弹出窗口吗?我不这么认为。