2016-08-13 3 views
1

사용자가 보고서를 만들 때 "즉시"위치를 만들 수 있도록하고 싶습니다. 가능한 경우 다음 모델을 사용하십시오.Django 형식 : ManyToMany 인라인 만들기

모델 :

class Report(models.Model): 
    ... 
    location = forms.ManyToManyField(Location) 

class Location(models.Model): 
    name = forms.CharField(max_length=255) 
    ... 

내가 검색하고 동작은 장고 formsets에 의해 주어진 일에 가깝습니다.

사실 저는 현재 다소 외계인 관계를 사용하고 형식 세트에 의존하면서이를 수행 할 수 있습니다. 이 기술을 사용하여 django-extra-viewsdjango-dynamic-formset을 추가함으로써 사용자가 추가 할 위치의 수를 선택할 수있게되었습니다. 실제 셋업

스트립 다운 버전 :

모델 :

class Report(models.Model): 
    ... 

class Location(models.Model): 
    name = forms.CharField(max_length=255) 
    report = forms.ForeignKey('Report') 

형태 :

class LocationForm(forms.ModelForm): 
    class Meta: 
     model = Location 
     fields = '__all__' 

class LocationFormSet(extra_views.InlineFormSet): 
    model = TestLocation 
    form_class = TestLocationForm 

시청자

class ReportCreateView(extra_views.CreateWithInlinesView): 
    model = Report 
    inlines = [LocationFormSet, ] 

불행히도이 설정을 사용하여 위치 중복 된 위치를 많이 가져 오는 하나 이상의 보고서에 속할 수 없습니다. 그래서 ManyToMany 관계가 더 적합 할 것이라고 생각합니다. 중개 모델에 대해 이야기 한이 질문과 관련된 몇 가지 답변을 발견했지만 작동시키기 위해 어느 곳으로도 나갈 수 없었습니다.

내 작업 설정을 조정하여 manytomany 관계에서 작동하도록하는 방법이 있습니까? 아니면 사용자가 보고서 작성 중에 위치를 "즉석에서"만들 수있는 완전히 다른 접근 방식이 있습니까?

감사합니다.

+0

최상의 응답 : https://stackoverflow.com/a/21577368/1393774 – Virako

답변

0

"on-the-fly"를 만들기 위해 ForeningKey에서 ManyToMany를 변경했습니다.

class Report(models.Model): 
     ... 
     location = forms.ManyToManyField(Location) # REMOVE 

    class Location(models.Model): 
     report = models.ForeignKey(Report) # ADD 
     name = forms.CharField(max_length=255) 
     ... 

그리고 나서 InlineForms가 작동합니다.

+0

이 방법으로 위치를 재사용 할 수 없습니까? – EsseTi