Django의 nested form fields 정보
2230 단어 djangoformsetinline_formset
class Article(models.Model):
title...
content...
class Attachment(models.Model):
file...
article = models.ForeignKey(Article, ref_name = 'attachments')
class Photo(models.Model):
image...
article = models.ForeignKey(Article, ref_name = 'photos')
현재 요구 사항은, 내가 새로운article를 만들 때, 이article에 그림이나 첨부 파일이 있다면, 한form에서 서버에 같이post하고,새로운article를 만든 후에 첨부된 첨부 파일이나 사진을 함께 저장할 수 있습니다.
Rails에서 아주 편리한 해결 방안이 하나 있는데, 바로 모델에서accepts를 정의하는 것이다nested_attributes_for, 이어서 html에서fields 사용 가능for 태그.
Django에서 사용된 inline formset은
inline formset의 생성은
inlineformset_factory
:
inlineformset_factory(parent_model,model,form=ModelForm,
formset=BaseInlineFormSet,fk_name=None,
fields=None,exclude=None,
extra=3,can_order=False,can_delete=True,max_num=None,
formfield_callback=None,widgets=None,validate_max=False)
이 예에서parent모델에는 Article, 모델에는 Attachment 또는 Photo
AttachmentInlineFormset = inlineformset_factory(Article, Attachment, extra = 1)
PhotoInlineFormset = inlineformset_factory(Article, Photo, extra = 1)
inline formset 인스턴스화:
attachment_formset = AttachmentInlineFormset(**self.get_form_kwargs(), prefix = 'attachments')
photo_formset = PhotoInlineFormset(**self.get_form_kwargs(), prefix = 'photos')
CreateView 또는 UpdateView에서
class XXView(CreateView):
def form_valid(self, form):
instance = form.save(commit = False)
attachment_formset = AttachmentInlineFormset(instance = instance, prefix = 'attachments', **self.get_form_kwargs())
photo_formset = PhotoInlineFormset(instance = instance, prefix = 'photos', **self.get_form_kwargs())
if attachment_formset.is_valid() and photo_formset.is_valid():
instance = form.save()
for fs in [attachment_formset, photo_formset]:
fs.instance = instance
fs.save()
return HttpResponseRedirect(self.get_success_url())
else:
return self.form_invalid(self, form)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.