이것은 바보 같은 질문 일 수 있지만 cleaned_data를 수동으로 설정하는 것이 안전한지 확실하지 않습니다. 워드 프로세서 says : is_valid 일단Django에서 cleaned_data를 수동으로 설정할 때 위험합니까?
()는 True를 반환합니다, 당신은 양식에 의해 정의 된 유효성 검사 규칙을 준수하는 것이 지식의 안전 양식 제출 를 처리 할 수 있습니다. 이 지점에서 request.POST에 직접 액세스 할 수 있지만 form.cleaned_data에 액세스하는 것이 좋습니다. 이 데이터는 에 대해서만 유효성이 검사되었지만 관련 파이썬 유형으로도 변환됩니다.
자세한 내용은 책 제목, 책 저자 및 URL을 묻는 필드와 같은 여러 필드가있는 modelform이 있다고 가정 해보십시오.
양식 조건은 다음과 같습니다. url 필드가 비어 있으면 사용자는 제목과 작성자를 제공해야합니다. url 필드가 주어지고 그 밖의 것이 없다면, 주어진 url로부터 html을 파싱하고 사용자를 위해 자동으로 제목과 저자를 추출합니다.
URL에서 제목과 작성자를 자동으로 가져 오는 경우 양식에서 작성자 및 제목에 대해 빈 cleaned_data가 반환되므로이 데이터를 모델에 저장하는 가장 좋은 방법은 무엇입니까? 구문 분석 된 데이터가 내가 모델에있는 유효성 검사 규칙을 준수하는지 확인했지만 cleaned_data를 설정하면 의심스러운 것으로 보입니다. modelform 클래스에서
:
def save(self, commit = True, *args, **kwargs):
parsed_title = ... # String returned by my html parsing function
parsed_author = ... # String returned by my html parsing function
self.cleaned_data['title'] = parsed_title
self.cleaned_data['author'] = parsed_author
편집 : 이것은 약간은
def save(self, commit=True, *args, **kwargs):
instance = super(BookInfoForm, self).save(commit=commit, *args, **kwargs)
....
instance.title = parsed_title
instance.author = parsed_author
return instance
입니다 :
덕분에, 내가 그렇게처럼 만들어 f 주제는 이미 원래 질문에 답했기 때문에 위의 코드는 다른 부분을 깰 수 있습니다. 컴파일 된 정보를 http://..../media/books/<id>
에 저장하는 대신 <id>
이 서적 ID 인 경우 http://..../media/books/None
에 저장합니다. 내가 ID = 없음을 얻을되지 않도록 ID가 존재 확인 할 수있는 방법이 있나요
def insert_or_modify(request, id=None):
if id is not None:
book = BookModel.objects.get(pk=id)
else:
book = BookModel()
if request.method == 'POST':
form = BookInfoForm(request.POST, instance=book)
if form.is_valid():
form.save()
....
return render_to_response(...)
:
나는 추가 및 편집 처리 내views.py
에 추가/편집 기능이? 좀 더 구체적으로, modelform의 save()에서 instance.id = None 인 경우 id를 사용하여 새 인스턴스를 만드는 방법이 있습니까? super (ModelForm, self) .save (...)를 호출하면 나에게 그렇게 할 수 있다고 생각했지만?
다시 한번 감사드립니다!
감사합니다. 인스턴스를 사용하는 것이 더 좋겠지 만 이제는 instance.id의 존재 여부를 처리하는 방법에 대해 혼란스러워합니다 (편집 된 게시물 참조). – sharkfin