2017-10-13 1 views
0

Django의 양식을 사용하여 API PATCH 요청의 유효성을 검사하고 있습니다. "보기"(보기에서 직접보기가 아니기 때문에 따옴표로 사용하지만, 이것은 불안정한 Resource이지만 여기서는 관련이 없어야 함)이 패치 요청을 처리하는 self.data에는 License 개체의 변경하려는 객체의 인스턴스와 ModelForm을 인스턴스화하려고합니다. 분명히, 그러나, 나는 이것이 어떻게 작동하는지 오해하고 있습니다. 아래를 참조하십시오 : 나는 위의 함수에 데이터와 같은 몇 가지 필드를 전달하면, form.errorsModelForm 작품에 인스턴스를 설정 어떻게 명확하게 이해하고 있지 않다 의미하는 License 모델에 대한 다른 모든 필수 필드를 뿌려Django ModelForm 'instance'매개 변수가 예상대로 작동하지 않습니다.

def handle_patch(self, pk): 
    license = License.objects.get(id=pk) 

    form = LicenseResourceForm(self.data, instance=license) 

    if not form.is_valid(): 
     print(form.errors) 

.

은 내가 clean() 방법에 장고의 ModelForm 코드 자체에 몇 디버그 인쇄를 추가하고 청소를 수행하기 시작, 나는 self.instance 나를 혼란 나는 기대 License의 인스턴스로 채워집니다 것을 볼 수 있습니다 - ModelForm 객체는 인스턴스를 알고 있지만 말하기 위해 "빈 칸 채우기"를 사용하지는 않습니다.

그래서 나는 오해가 무엇입니까? 나는 틀린 일을해야만한다.

편집 나는 그래서 여기, 당신의 일부는 LicenseResourceForm 자체를 표시 할 수 있음을 깨닫게 내 디버그 출력을 포함한다 :

class LicenseResourceForm(ModelForm): 
    """Form for License Resource create and change endpoints.""" 
    class Meta(object): 
     model = License 
     fields = ['customer', 'service', 'enabled', 'not_valid_before', 'not_valid_after'] 

    def clean(self): 
     try: 
      print(self.instance) 
      super().clean() 
     except Exception as e: 
      print(e) 

답변

1

장고 양식이 API 사용과 돈을 위해 의미되지 않습니다 ' PATCH 의미를 이해합니다. 이는 사용자가 웹 양식에서 데이터를 입력하거나 변경하는 워크 플로우를 의미합니다.이 양식은 항상 모든 데이터를 백엔드에 게시합니다. 따라서 양식의 fields 특성에 나열된 모든 필드가 데이터와 비교 검사되고 누락 된 필드는 비어 있음으로 확인됩니다.

제공된 데이터를 기반으로 필드 목록을 동적으로 설정하기 위해 뭔가 똑똑한 방법을 사용하여 문제를 해결할 수 있지만 실제로 데이터 유효성 검사에 적절한 도구를 사용해야합니다. 나는 불안정하지는 않지만, 장고 - 나머지 - 프레임 워크는 이것을 위해 사용될 수있는 시리얼 라이저를 가지고있다.

+0

HTML 양식의 컨텍스트에서 생각하면 부분 양식을 보내지 않을 것이라는 점이 합리적입니다. 필드의 동적 설정에 대한 좋은 아이디어. 나는 그걸 가지고 놀 것이다. 고맙습니다! – fildred13

관련 문제