2013-10-30 3 views
1

몇 가지 수준의 편집 가능한 데이터가 필요한 페이지 작업 중입니다. 본질적으로 엔티티는 0에서 많은 그룹을 가질 수 있으며 각 그룹은 0에서 많은 사용자를 가질 수 있습니다. 모델은 다음과 같습니다 :중첩 모델/인라인 formsets

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 또는 아마도 인라인 formsets 일 필요가있다 생각으로 돌아오고 있지만, 주제에 대한 많은 자료를 찾을 수 없었습니다.

어떻게 접근하나요?

감사합니다,

알렉스

답변

0

당신은 그것을 꽤 많은 권리가있다, 당신의 유일한 문제는 장고가 중첩 된 인라인 formsets을 지원하지 않는다는 것입니다. 다행히 누군가가 admin : django-nested-inlines에서 이것을 허용하는 장고 앱을 만들었습니다. 나는 그들 자신을 프로젝트에서 상당히 성공적으로 사용하고있다. 여기 시나리오의

, 당신은이 라인을 따라 그들을 설정할 것 : 당신은 아마 SquadMember에 인라인으로 군인을 추가하여 더이를 드릴 다운 할 수

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) 

admin.py.

+0

감사합니다. hellsgate! 잠깐, 몇 주 전에 장고 - 중첩 - 인라인을 보았습니다. 나는 내장 된 관리 앱에서만 사용할 수 있다는 인상을 받았다. 그것이 사용자 정의 양식에도 적용되는지 알고 있습니까? – user2708386

+0

미안하지만 그건 전혀 시도하지 않은 것입니다. 그것은 아마도 내가 말했듯이 표준 ModelForm ubt보다는 중첩 된 - 인라인에서 폼 클래스 중 하나를 확장함으로써 가능할 수도있다. 나는 그것을 시도하지 않았다. – hellsgate

관련 문제