1

我正在处理一个需要有几个级别的可编辑数据的页面。本质上,一个实体可以有零到多个组,每个组可以有零到多个用户。型号如下:

from django.contrib.auth.models import User

class Platoon(models.Model):
    name = models.CharField(max_length=60)


class Squad(models.Model):
    name = models.CharField(max_length=60)
    platoon = models.ForeignKey('military.Platoon')


class Soldier(models.Model):
    display_name = models.CharField(max_length=60)
    user = models.ForeignKey(User)

class SquadMember(models.Model):
    squad = models.ForeignKey('military.Squad')
    soldier = models.ForeignKey('military.Soldier')

所以在这种情况下,一个排可以有多个小队,而这些小队又可以有多个小队成员,其中小队成员是一个士兵的交叉引用。

渲染页面时,我们知道我们正在查看哪个排,因此只需检索小队和小队成员的列表就很容易了。问题是我们需要能够在页面上添加/编辑/删除小队以及为每个小队添加/删除成员。几天来,我一直在尝试处理这些数据,但没有真正的突破。我一直在思考它需要是某种嵌套模型表单集或者可能是内联表单集,但我无法找到关于该主题的太多材料。

关于如何处理这个问题的任何建议?

谢谢,

亚历克斯

4

1 回答 1

0

你说得很对,你唯一的问题是 django 不支持嵌套的内联表单集。幸运的是,有人创建了一个 django 应用程序,它允许在管理员中执行此操作:django-nested-inlines。我在自己的项目中相当成功地使用了它们。

对于您的场景,您将按照以下方式设置它们:

管理员.py

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

from .models import Platoon, Squad, SquadMember


class SquadMemberInlineAdmin(NestedStackedInline):
    model = SquadMember

class SquadInlineAdmin(NestedStackedInline):
    model = Squad
    inlines = [SquadMemberInlineAdmin,]

class PlatoonAdmin(NestedModelAdmin):
    inlines = [SquadInlineAdmin,]

admin.site.register(Platoon, PlatoonAdmin)

您可以通过将 Soldier 作为内联添加到 SquadMember 来进一步深入研究。

于 2013-10-30T16:14:15.660 回答