Stack Overflow на русском Asked by mila on August 3, 2020
views.py
from .models import Visitor, Worker, Documentation
def visitor_edit(request, pk):
visitor = get_object_or_404(Visitor, pk=pk)
if request.method == "POST":
#передаём экземпляр visitor в качестве instance форме и при сохранении…
form = VisitorForm(request.POST, instance=visitor)
pform = WorkerForm(request.POST)
dform = DocumentationForm(request.POST)
if form.is_valid() and pform.is_valid() and dform.is_valid():
visitor = form.save(commit=False)
worker = pform.save(commit = False)
documentation = dform.save(commit = False)
#visitor.author = request.user
#visitor.published_date = timezone.now()
visitor.save()
worker.save()
documentation.save()
return redirect('visitor_detail', pk=visitor.pk)
else:
# и когда мы открываем форму для редактирования:
form = VisitorForm(instance=visitor)
pform = WorkerForm()
dform = DocumentationForm()
return render(request, 'bl/visitor_edit.html', {'form': form, 'pform' : pform, 'dform' : dform})
def visitor_new(request):
if request.method == "POST":
form = VisitorForm(request.POST, prefix='form')
pform = WorkerForm(request.POST, prefix='pform')
dform = DocumentationForm(request.POST, prefix='dform')
if form.is_valid() and pform.is_valid() and dform.is_valid():
visitor = form.save(commit=False)
worker = pform.save(commit = False)
documentation = dform.save(commit = False)
#visitor.author = request.user
#visitor.published_date = timezone.now()
visitor.save()
worker.save()
documentation.save()
return redirect('visitor_detail', pk=visitor.pk)
else:
form = VisitorForm(prefix='form')
pform = WorkerForm(prefix='pform')
dform = DocumentationForm(prefix='dform')
return render(request, 'bl/visitor_edit.html', {'form': form, 'pform' : pform, 'dform' : dform})
visitor_edit.html
{% block content %}
<h1>Новый посетитель</h1>
<form method="POST" class="post-form">{% csrf_token %}
{{ form.as_p }}
{{ pform.as_p }}
{{ dform.as_p }}
<button type="submit" class="save btn btn-default">Сохранить</button>
</form>
{% endblock %}
forms.py
from django import forms
from .models import Visitor, Worker, Documentation
class VisitorForm(forms.ModelForm):
class Meta:
model = Visitor
fields = ('name_visitor', 'surname_visitor', 'phone', 'address', 'entry_time', 'time_out')
class WorkerForm(forms.ModelForm):
class Meta:
model = Worker
fields = ('name_worker', 'surname_worker' , 'position_worker')
class DocumentationForm(forms.ModelForm):
class Meta:
model = Documentation
fields = ('document_type', 'document_number')
При заполнении формы в итоге сохраняются только поля, которые относятся к модели Visitor и соответственно VisitorForm.
Подскажите, что изменить, чтобы сохранялись поля во всех формах?
Вы не провели валидацию форм WorkerForm
и DocumentationForm
.
Вам нужно проверять каждую форму на is_valid()
, а не только VisitorForm
.
Так-же добавим префикс к каждой форме.
Код view
будет выглядеть примерно следующим образом:
from .models import Visitor, Worker, Documentation
def visitor_new(request):
if request.method == "POST":
form = VisitorForm(request.POST, prefix='form')
pform = WorkerForm(request.POST, prefixt='pform')
dform = DocumentationForm(request.POST, prefix='dform')
if form.is_valid() and pform.is_valid() and dform.is_valid():
visitor = form.save(commit=False)
worker = pform.save(commit = False)
documentation = dform.save(commit = False)
#visitor.author = request.user
#visitor.published_date = timezone.now()
visitor.save()
worker.save()
documentation.save()
return redirect('visitor_detail', pk=visitor.pk)
else:
form = VisitorForm(prefix='form')
pform = WorkerForm(prefixt='pform')
dform = DocumentationForm(prefix='dform')
return render(request, 'bl/visitor_edit.html', {'form': form, 'pform' : pform, 'dform' : dform})
Answered by Сергей Чабаненко on August 3, 2020
0 Asked on December 30, 2021 by akmaral-islamova
1 Asked on December 30, 2021
0 Asked on December 30, 2021 by alihan-urumov
python tensorflow %d0%bc%d0%b0%d1%88%d0%b8%d0%bd%d0%bd%d0%be%d0%b5 %d0%be%d0%b1%d1%83%d1%87%d0%b5%d0%bd%d0%b8%d0%b5
1 Asked on December 30, 2021 by mankey_yeeman
1 Asked on December 30, 2021 by zephyrcode
javascript node js postgresql %d0%b1%d0%b0%d0%b7%d0%b0 %d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85
1 Asked on December 30, 2021 by aro-hovhannisyan
c %d0%b8%d1%81%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d1%8f
1 Asked on December 30, 2021
1 Asked on December 28, 2021 by bigata
1 Asked on December 28, 2021 by coder8008
windows windows 10 %d0%b4%d0%b8%d1%81%d0%ba %d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2%d0%b0%d1%8f %d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b0 %d1%84%d0%b0%d0%b9%d0%bb%d1%8b
3 Asked on December 28, 2021 by user398776
0 Asked on December 28, 2021
0 Asked on December 28, 2021
1 Asked on December 28, 2021
c virtual %d0%ba%d0%bb%d0%b0%d1%81%d1%81%d1%8b %d0%be%d0%be%d0%bf %d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%b8
1 Asked on December 28, 2021 by hrayr
ios swift uiview %d0%b0%d0%bd%d0%b8%d0%bc%d0%b0%d1%86%d0%b8%d1%8f
Get help from others!
Recent Answers
Recent Questions
© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP