I는 다음과 같습니다 Domain
라는 이름의 모델이있다. 이 모델에는 사용자 입력이 필요한 필드가 하나 있지만 외부 키 필드에는 사용자 입력이 필요하지 않습니다. 내 일반보기에서 생성되지만 현재 인증 된 사용자의 값을 할당하는 양식에서 해당 필드를 제외하려면 어떻게해야합니까?제외 필드
감사합니다.
I는 다음과 같습니다 Domain
라는 이름의 모델이있다. 이 모델에는 사용자 입력이 필요한 필드가 하나 있지만 외부 키 필드에는 사용자 입력이 필요하지 않습니다. 내 일반보기에서 생성되지만 현재 인증 된 사용자의 값을 할당하는 양식에서 해당 필드를 제외하려면 어떻게해야합니까?제외 필드
감사합니다.
이번 주 초에 django-users group에서 유사한 질문에 대한 Russel의 대답을 살펴보십시오.
응답 *을 인용 :
양식 및보기가 다른 문제를 해결.
보기에서는 "이 요청을 어떻게 처리하고 응답으로 변환합니까?"라는 문제를 해결하고 있습니다. " Form은 " 이 요청의 POST 데이터를 모델 객체로 변환하는 방법 (또는 모델 객체로 변경)"문제를 해결하고 있습니다.
은 매우 약, 뷰가하고있는 다음
- 보기
- 보기 이것은 POST가보기 양식을 요청의 경우 GET 또는 POST
- 입니다 여부를 작동하는 요청을 받으면 게시물을 모델 변경으로 바꾸기
- 양식 성공 또는 실패를 반환합니다.
- 보기 양식의 성공 또는 실패에 대한 응답입니다.
- 보기는 응답을 반환합니다.
양식의 기능은보기의 기능의 전체 하위 집합입니다 - 이런 이유로, 그것은 완전히 상호 교환 내부 구성 요소입니다.
뷰 양식에 대한 모든 기본값을 추측하기 이제, 간단한 상황에서, 그것은 가능 -이 알아야 할 모든 당신이 푸 모델 을 상대하고, 그것을 기본 푸를 구성 할 수 있다는 것입니다 ModelForm. 그러나보다 정교한 양식 요구 사항이있는 경우 사용자 정의 양식이 필요합니다.
은 View 클래스의 모든 옵션을 표시하여 구현할 수 있습니다. 하지만 모든 것을 깨끗하게 유지하기 위해 은 ModelForm을 격리 된 상태로 유지하고 어떤 형식 클래스를 사용할지 지정하기 위해보기를 에 제공했습니다.
class CampaignForm(forms.ModelForm):
class Meta:
model = Campaign
exclude = ('user', 'name', 'content_inlined')
class CreateCampaignView(CreateView):
form_class = CampaignForm
template_name = "forms/create.html"
I를 -
그래서 필드를 제외의 사용 사례를 충당하기 위해, 당신은 필드를 제외하는 ModelForm을 정의, 다음 CreateView 사용하려는 양식을 알려주세요 "필드 값 수정"이라고 말하면 새 캠페인 인스턴스를 저장하기 전에 에 user, name 및 content_inlined 값을 설정한다는 의미입니다. 이 작업을 수행하려면 에 양식의 형태로 처리 로직을 몇 가지 추가 코드를 삽입해야합니다
class CreateCampaignView(CreateView):
form_class = CampaignForm
template_name = "forms/create.html"
def form_valid(self, form):
form.instance.user = ... (something meaningful.. e.g., self.request.user)
return super(CreateCampaignView, self).form_valid(form)
이 양식이 유효 할 때 기본 동작을 무시하고 여분의 값을 설정합니다. form_valid()의 super() 구현은 인스턴스를 저장합니다.
레코드의 경우 ModelForm의 save() 메서드를 재정 의하여 수행 할 수도 있습니다.하지만 이렇게하면 요청 개체가 손실됩니다. 인스턴스 값을 요청에 민감한 것으로 설정하십시오.
* 원래 응답 집합은 form.instance.user
대신 self.object.user
입니다. 이것은 AttributeError
을 제공하므로 위에서 변경했습니다.