我正在处理一个需要有几个级别的可编辑数据的页面。实质上,一个实体可以有零到多个组,每个组可以有零到多个用户。模型如下:
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')
所以在这种情况下,一个排可以有多个小队,而小队又可以有多个小队成员,小队成员是士兵的交叉引用。
在渲染页面时,我们知道我们正在查看哪个排,所以只需检索一个小队和小队成员列表就很容易了。问题是我们需要能够在页面上添加/编辑/删除小队以及为每个小队添加/删除成员。我一直试图将这些数据处理好几天,但没有真正的突破。我一直认为它需要是某种嵌套的模型formset或者内联的formset,但是我还没有找到关于这个主题的更多材料。
有关如何处理此问题的任何建议吗?
谢谢,
亚历
答案 0 :(得分:0)
你非常正确,你唯一的问题是django不支持嵌套的内联表单集。幸运的是,有人创建了一个django应用程序,允许在admin:django-nested-inlines中使用它。我在自己的项目中相当成功地使用它们。
对于您的方案,您可以按照这些方式进行设置:
admin.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)
你可以通过将士兵作为内联添加到SquadMember来进一步深入研究。