Django Admin中的嵌套内联

3 投票
3 回答
2969 浏览
提问于 2025-04-17 23:38

我遇到了一个情况,想在Django的后台管理界面中显示三个模型,并且希望它们是嵌套在一起的。我使用的是Django 1.6版本,并按照这个链接中的设置进行了配置:https://github.com/Soaa-/django-nested-inlines

但是,结果并没有达到我的预期。请问有没有其他方法可以在Django中实现嵌套的内联功能?我对这个框架还是个新手,希望能得到一些指导来解决这个问题。

model.py

class Project(models.Model):
    name = models.CharField(max_length=200)
    code = models.IntegerField(default=0)
    def __unicode__(self):
        return self.name

class Detail(models.Model):
    project = models.ForeignKey(Project)
    value = models.DecimalField(max_digits=5, decimal_places=2)
    location = models.IntegerField(default=0)

class Configuration(models.Model):
    detail = models.OneToOneField(Detail)
    content1 = models.IntegerField()
    content2 = models.IntegerField()

admin.py

from django.contrib import admin
from nested_inlines.admin import NestedModelAdmin, NestedTabularInline, NestedStackedInline

from myapp.models import Project, Detail, Configuration

class ConfigInline(NestedStackedInline):
    model = Configuration
    extra = 1

class DetailInline(NestedTabularInline):
    model = Detail
    inlines = [ConfigInline,]
    extra = 1

class ProjectAdmin(admin.ModelAdmin):
    inlines = [DetailInline]

admin.site.register(Project, ProjectAdmin)

3 个回答

0

在你导入下面这个包之前,先安装它。

使用命令 pip install django-nested-admin,然后把它添加到已安装应用的列表里。

INSTALLED_APPS = [
   ...
   'nested_admin',
   ...
]

现在,你可以导入它了。

from nested_inline.admin import NestedModelAdmin, NestedTabularInline, NestedStackedInline
1

我觉得你忘了把ProjectAdmin设置为一个NestedModelAdmin了:

admin.py :

from django.contrib import admin
from nested_inlines.admin import NestedModelAdmin, NestedTabularInline, NestedStackedInline

from myapp.models import Project, Detail, Configuration

class ConfigInline(NestedStackedInline):
    model = Configuration
    extra = 1

class DetailInline(NestedTabularInline):
    model = Detail
    inlines = [ConfigInline,]
    extra = 1

class ProjectAdmin(NestedModelAdmin):
    inlines = [DetailInline]

admin.site.register(Project, ProjectAdmin)
1

可以试试这个链接:https://pypi.python.org/pypi/django-nested-inline

这个工具已经更新,可以和Django 1.6一起使用了。

撰写回答