현재 두 개의 양식을 한 페이지에 넣으려고합니다. 클래스 기반 뷰를 사용하고 있습니다.django 클래스 기반보기 다중 양식 유효성 검사
class TaskDetailView(FormMixin, generic.DetailView):
model = Task
template_name="tasks/detail.html"
form_class = NoteForm
form_class2 = DurationForm
def get_context_data(self, **kwargs):
context = super(TaskDetailView, self).get_context_data(**kwargs)
context['note_form'] = self.get_form()
context['notes'] = Note.objects.filter(task__slug=self.kwargs['slug'])
context['duration_form'] = self.form_class2()
context['duration'] = Duration.objects.all()
return context
def get_success_url(self):
return reverse('task_detail', kwargs={'slug': self.kwargs['slug']})
def post(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return HttpResponseForbidden
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
current_task = get_object_or_404(Task, slug=self.kwargs['slug'])
self.object = form.save(commit=False)
self.object.task = current_task
self.object.save()
return HttpResponse(self.get_success_url())
현재 상태는 모든 양식을 표시하고 메모 양식 만 저장할 수 있다는 것입니다. 200 개의 상태 POST가 있지만 데이터가 데이터베이스에 저장되지 않아도 지속 시간 형식을 저장할 수 없습니다.
내 실수는 내가 유효성을 검사하지 않는다는 것이지만 실제로 어떻게 해야할지 잘 모르겠다. 장고의 CBV에서 여러 양식에 대한 정보가별로 없다.
나는 약간의 지침과 도움에 정말로 감사 할 것입니다.
감사
경로를 혼란스럽게 만들기 때문에 디자인을 다시 생각해보십시오. 우선 브라우저는 두 양식 중 * ONE * 만 보냅니다. HTML은 두 개의 submit 버튼이있는 하나의 폼이 오류가 발생하기 쉽고 Django의 form 클래스 디자인에 반하는 두 개의 폼을 보여주기 위해 템플릿을 중첩하거나 조정할 수 없습니다. 즉, 런타임에 사용할 양식을 선택하고 완벽한 방법이 필요합니다. [get_form_class] (https://docs.djangoproject.com/en/1.10/ref/class-based-views/mixins- 편집/# django.views.generic.edit.FormMixin.get_form_class). 그러나 가장 쉬운 방법은 2 개의 서로 다른 URL을 사용하는 것입니다. – Melvyn
안녕 Melvyn, 그래서이 장고 - 특정 문제는 단일 페이지에 여러 개의 양식이 정말 적합하지 않습니다? –
안녕하세요. 예, 아니오. 브라우저는 한 번에 하나의 양식 만 보냅니다. 이러한 관점에서 볼 때 여러 폼을 처리하기 위해 페이지 또는 뷰 객체를 디자인하는 것은 거의 의미가 없습니다. 특히 두 개의 다른 URL에서 두 양식을 처리하는 것이 매우 쉽기 때문에 특히 그렇습니다. 다른 ModelForm Basket에 대한 외래 키를 처리하는 ModelForm for Apples가있는 경우 formets를 사용해야하며 Basket 양식 만보기로 등록해야합니다. 그러나 귀하의 질문에 나는이 두 형태가 관련이 없지만 두 가지 다른 일을 성취하고 있음을 이해합니다. – Melvyn