2012-02-24 3 views
0

나는이 두 가지 모델 :왜이 django ModelForm이 유효하지 않습니까?

ProcessDao 
    ** normal fields ** 
    resource = models.ForeignKey(ResourceData, related_name='processes') 

ResourceData 
    ** Normal Fields ** 

아래의 코드 내 views.py에 다음 pdForm이 유효 할 수있는 방법이

pdForm = ProcessDataForm(request.POST) 
rd = ResourceData.objects.get(pick_date__exact = request.POST['pick_date']) 
pdForm.resource = rd <------ here is the assignment 
if pdForm.is_valid(): 
    pdForm.save() 
else: 
    print 'pdForm is not valid ! ', pdForm.errors 
    # print "resource is not valid." 

있습니까?

+0

당신이 pdForm.errors –

+0

를 인쇄 할 수 ** pdForm 유효하지 않습니다!

  • resource
    • 이 필드는 필수 필드입니다.
** – MrROY

+0

어쨌든 유일한 필드 리소스는 비어 있습니다. null인지 아닌지 확인하려면'rd'를 검사해야 할 수도 있습니다. –

답변

1

빈 필드를 할당하기 위해 정리 된 양식으로 작업하지 않아야합니까? 이 자원 모델의 전용 필드 인으로 작동하는지 그냥 확실하지 않다

if pdForm.is_valid(): 
    cleanform = pdForm.save(commit = False). 
    cleanform.resource = rd 
    cleanform.save() 

: 같은 것을보십시오. 나는 django 멍청한 놈이야,하지만 나를 위해 여러 가지 형태로 ForeignKey 필드를 할당 작동합니다.

+0

** 확인을하기 전에 pdForm.save (commit = False)를 시도하면 오류가 ** "ProcessData가 될 수 없습니다. 데이터가 검증되지 않았기 때문에 생성되었습니다. "** – MrROY

+0

pdForm.is_valid() 전에 pdForm.fields [ 'resource'] = rd.id를 시도한 다음 .is_valid() 및 save()를 수행하십시오. 데이터를 정리하기 전에 양식 필드를 변경하는 방법이라고 생각합니다. 그게 도움이되지 않는다면 나는 아이디어가 없다. – Marek

+0

pdForm.fields [ 'resource'] = rd, rd.id가 아님 – Marek

1

임의의 속성을 양식 객체에 지정하면 왜 유효할까요? 폼이 인스턴스 속성을 사용하여 유효성을 검사하는 요점은 없으며 문서의 어떤 것도 그 속성을 의미하지는 않습니다.

이 문제를 올바르게 해결할 수있는 몇 가지 방법이 있습니다. 먼저, 가장 추악한 것은 request.POST을 복사하고 일치하는 개체의 ID를 거기에 삽입하는 것입니다. 원래 인스턴스가 변경되지 않으므로 복사해야합니다.

훨씬 더 좋은 방법은 (폼의 Meta 클래스를 통해) 모두 양식에서 필드를 제외하고 is_valid 절에서이 작업을 수행 :

object = pdForm.save(commit=False) 
rd = ResourceData.objects.get(pick_date__exact = pdForm.cleaned_data['pick_date']) 
object.resource = rd 
object.save() 
관련 문제