장고 인라인 서식과 비슷한 기능을 구현하고 싶습니다. 내가 관심있는 것은 Django가 주 오브젝트의 유효성 검사 및 저장과 관련하여 인라인 형식의 관련 오브젝트를 처리하는 방법입니다.django가 인라인 폼의 유효성을 검사하고 저장하는 방법
두 모델, Blog
및 Entry
이 있다고 가정 해 보겠습니다. Entry
에는 null이 아닌 Blog
에 대한 외래 키가 있습니다. 블로그와 항목을 한 곳에서 만들 수 있기를 원합니다. Django 인라인 양식을 사용하는 방법은 다음과 같습니다.
blogform = BlogForm(request.POST)
if blogform.is_valid():
tmp = blogform.save(commit=False)
entriesform = EntryInlineFormset(request.POST, instance=tmp)
if entriesform.is_valid():
entriesform.save()
blog.save()
여기에는 어떤 문제가 있습니까? 장고는 블로그를 데이터베이스에 저장하지 않고 항목을 어떻게 검증 할 수 있습니까? 장고 코드에서이 코드를 찾으려고했지만, 실제로 코드를 작성한 곳을 찾을 수 없었습니다.
내 생각에 그들은 거래를 생성합니다. 블로그 양식을 저장하고 항목 양식이 유효하지 않은 경우 롤백합니다. 그러나 entriesform이 유효한 경우 다음은 무엇입니까? 블로그 인스턴스가 저장되어 있습니까? save
이 결코 호출되지 않으면 어떻게됩니까?
두 가지 방법 (is_valid
및 save
)을 통해 트랜잭션을 확장합니까? 한 가지 방법으로 거래를 시작하고 다른 방법으로 끝내는 것이 가장 좋은 방법이라고 생각하지 않습니다.
답장을 보내 주셔서 감사합니다. 이것은 조금 도움이되었지만, 아마 나 자신에 대해 잘 설명하지 못했습니다. django'BaseInlineFormset'의 구현이 유효성 검사를 통과해야하는 경우 블로그 ID (또는 기본적으로 널이 아닌 외부 키)를 얻을 수있는 방법을 알고 있습니까? 내 애플 리케이션에서 비슷한 무언가를 구현할 수 있도록 내부를 알고 싶습니다. – davekr
유효성 검사에 FK가 필요한 위치의 예를 들려 줄 수 있습니까? "Django"는 formset에서이 작업을 전혀 수행하지 않습니다. 관리자가 [ModelAdmin.changeform_view] (https://github.com/django/django/blob/)에서 수행 한 동작을 참조 할 것으로 기대합니다. 마스터/django/contrib/admin/options.py # L1355). –
네, 맞습니다. formset에 FK 검증이 없습니다. 저장하려고하면'IntegrityError'가 발생합니다. 'entriesform'는'blog' 인스턴스에 대한 참조를 유지하고'blogform'가 저장된 후에'entriesform'의 참조는 id를 가지며 formset을 저장할 수 있습니다. 이것은 제가 알고 싶었던 것입니다, 많은 감사합니다! – davekr