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。私は自分のプロジェクトでそれらをかなりうまく使用しています。

ここでのシナリオでは、次の行に沿って設定します。

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)

Soldier をインラインとして SquadMember に追加することで、これをさらに掘り下げることができます。

于 2013-10-30T16:14:15.660 に答える