簡體   English   中英

Django 深度 admin.TabularInline

[英]Django deep admin.TabularInline

如果有這樣的關系: UML1

B.ForeignKey(A)

django 可以通過TabularInlineone管理page顯示它:

管理文件

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)

模型.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)

.輸出是這樣的: 輸出1

但是如果我們像下面那樣向B add另一個ForeignKey關系, UML2

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

那么如何在one admin page顯示所有模型?

管理文件

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)

. 模型.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: 輸出2

我有同樣的問題,我設法做到了。 我不知道這是否正是您需要的,但如果不是,請告訴我,我將刪除我的答案。

你可以這樣做:

管理文件

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 開箱即用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM