gpt4 book ai didi

python - Django 深层 admin.TabularInline

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:41 27 4
gpt4 key购买 nike

如果存在如下关系:UML1

B.ForeignKey(A)

django 可以通过 TabularInlineone管理页面中显示它:

admin.py

from django.contrib import admin
from myapp2 import models
# Register your models here.
class TabularInlineB(admin.TabularInline):
model=models.B

class AdminA(admin.ModelAdmin):
inlines=[TabularInlineB, ]

admin.site.register(models.A, AdminA)

models.py

from django.db import models

# Create your models here.

class A(models.Model):
name=models.CharField(max_length=10)

class B(models.Model):
name=models.CharField(max_length=10)
a=models.ForeignKey(A)

.输出如下:output1

但是如果我们添加另一个与B相关的ForeignKey,如下所示, UML2

B.ForeignKey(A)
C.ForeignKey(B)

然后如何在一个管理页面中显示所有模型?

admin.py

from django.contrib import admin
from myapp2 import models

class TabularInlineC(admin.TabularInline):
model=models.C

class TabularInlineB(admin.TabularInline):
model=models.B
inlines=[TabularInlineC, ]

class AdminA(admin.ModelAdmin):
inlines=[TabularInlineB, ]

admin.site.register(models.A, AdminA)

.models.py

from django.db import models

# Create your models here.

class A(models.Model):
name=models.CharField(max_length=10)

class B(models.Model):
name=models.CharField(max_length=10)
a=models.ForeignKey(A)

class C(models.Model):
b=models.ForeignKey(B)
name=models.CharField(max_length=10)

输出不显示C:outpu2

最佳答案

我也遇到了同样的问题,但我成功了。我不知道这是否正是您所需要的,但如果不是,请告诉我,我将删除我的答案。

你可以这样做:

Admin.py

from django.contrib import admin
from myapp2 import models

class TabularInlineC(admin.TabularInline):
model=models.C

class TabularInlineB(admin.TabularInline):
model=models.B

class AdminA(admin.ModelAdmin):
inlines=[TabularInlineB, TabularInlineC ]

admin.site.register(models.A, AdminA)

这将渲染两个内联,每个内联在模型 A 的管理页面中都有一个部分。请注意,在这段代码中,模型 B 和模型 C 都有模型 A 的外键。事实上,这与您所使用的模式并不完全相同在你的问题中使用,但在我看来,这是实现你想要的最简单的方法。事实上,您将两个模型指向同一个模型,因此您可以认为该模型具有父模型。因此,如果您可以找到一个共同的字段来指向,您将能够以相同的形式添加两个内联,因为两个模型都将具有指向模型 A 的链接。

此外,您可以做的另一件有趣的事情是将 classes = ['collapse'] 添加到 class TabularInlineBclass TabularInlineC 这将允许在管理页面的这两个部分上折叠。

希望对你有帮助!

编辑

如果您绝对需要只渲染一个包含两个模型的内联,我也不确定 Django 是否可以开箱即用。

关于python - Django 深层 admin.TabularInline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46806223/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com