2013-10-13 4 views
0

에 필드를 검증 그리고 그것을 생성 된 객체에 다시 추가하십시오. 내가 CreateView.form_valid()에서이 작업을 수행 할 수 있다는 것을 알지만, 이것이 완전히 무효화되었다는 것을 이해합니다.장고 CreateView 내가 장고 일반적인 전망을 가지고, 그래서하지 필드

나는 이것을 get_form_kwargs()에 추가하려고 시도했으나 포함 된 필드에 없으므로 조직 kwarg를 기대하지는 않습니다.

내가 원하는 것은 나머지 양식과 함께 유효성을 검사하는 양식 인스턴스에 추가하는 것입니다. 올바른 조직인지, 문제의 사용자가 새 양식을 추가 할 수있는 올바른 권한이 있는지 확인하십시오. 그것을위한 foobaz.

이것이 내가하는 최선의 방법이라면 내 자신의 견해를 말끔히 틀어 주어 기쁘다. 그러나 나는 단순히 트릭을 놓칠지도 모른다.

감사합니다.

답변

0

나는 organisation 필드를 포함하고 숨김 및 읽기 전용으로 정의하는 것이 좋을 것입니다. 이렇게하면 장고가 유효성을 검사합니다.

당신은 다음과 같은 get_queryset 메소드를 오버라이드 (override) 할 수 있습니다 organisation_id는 URL 패턴에 키워드입니다

def get_queryset(self): 
    return Foobaz.objects.filter(
     organisation__id=self.kwargs['organisation_id']) 

.

0

보기의 get_kwargs() 메서드와 양식의 save() 메서드를 재정의 할 수 있습니다. get_kwargs() 나는 형태의 초기 데이터로 organization_id를 "주입"및 save()에서 I는 공급 된 초기 데이터에 누락 정보를 검색 :

urls.py 물 :

urlpatterns('', 
    #... Capture the organization_id 
    url(r'^/organisation/(?P<organization_id>\d+)/foobaz/create/', 
     FoobazCreate.as_view()), 
    #... 
) 

조회한다. 평 : forms.py에서

class FoobazCreate(CreateView): 
    # Override get_kwargs() so you can pass 
    # extra info to the form (via 'initial') 
    # ...(all your other code remains the same) 
    def get_form_kwargs(self): 
     # get CreateView kwargs 
     kw = super(CreateComment, self).get_form_kwargs() 
     # Add any kwargs you need: 
     kw['initial']['organiztion_id'] = self.kwargs['organization_id'] 
     # Or, altenatively, pass any View kwarg to the Form: 
     # kw['initial'].update(self.kwargs) 
     return kw 

:

class FoobazForm(forms.ModelForm): 
    # Override save() so that you can add any 
    # missing field in the form to the model 
    # ...(Idem) 
    def save(self, commit=True): 
     org_id = self.initial['organization_id'] 
     self.instance.organization = Organization.objects.get(pk=org_id) 
     return super(FoobazForm, self).save(commit=commit) 
관련 문제