Django: Сохранение нескольких форм из одного представления
Я просмотрел множество ответов, но не смог продвинуться. Код можно найти здесь: https://github.com/varlenthegray/wcadmin/blob/master/customer/views.py - сейчас сосредоточен на "клиенте" и немного "стройплощадки".
Вопрос: Как получить первичный ключ сайта работы? Он перезагружается через JS, поэтому я предполагаю, что он должен быть в форме. Лучшим методом будет указать его как строку запроса в конце URL? Он не "сломан", т.е. не выдает мне никаких ошибок Django, но он также не сохраняется.
forms.py
class ViewCustomerForm(forms.ModelForm):
next_service = forms.DateField(widget=forms.DateInput(format='%m-%d-%Y'), input_formats=['%m-%d-%Y'])
edit_customer = forms.BooleanField(widget=forms.HiddenInput, initial=True)
class Meta:
model = Customer
fields = ['company', 'title', 'first_name', 'middle_name', 'last_name', 'secondary_contact_name', 'website',
'email', 'main_phone', 'alternate_phone', 'fax_number', 'billing_address_1', 'billing_city',
'billing_state', 'billing_zip']
class ViewJobSiteForm(forms.ModelForm):
edit_job_site = forms.BooleanField(widget=forms.HiddenInput, initial=True)
next_service_date = forms.DateField(widget=forms.DateInput(format='%m-%d-%Y'), input_formats=['%m-%d-%Y'])
class Meta:
model = JobSite
fields = ['name', 'address', 'city', 'state', 'zip', 'phone_number', 'email', 'next_service_date',
'active', 'access_code', 'bill_parent', 'customer', 'primary_technician', 'service_interval',
'requires_supporting_technician']
class EditJobSiteEquipment(forms.ModelForm):
edit_job_site_equipment = forms.BooleanField(widget=forms.HiddenInput, initial=True)
class Meta:
model = JobSiteEquipment
fields = ['id', 'tags', 'installed_on', 'edit_job_site_equipment']
views.py
@login_required
def view_customer(request, pk):
customer = get_object_or_404(Customer, id=pk)
job_site = JobSite.objects.filter(customer=pk).first()
all_job_sites = JobSite.objects.filter(customer=pk)
edit_customer = ViewCustomerForm(instance=customer, prefix='customer')
edit_job_site = ViewJobSiteForm(instance=job_site, prefix='job')
if request.method == 'POST':
if 'customer-edit_customer' in request.POST:
edit_customer = ViewCustomerForm(request.POST, instance=customer, prefix='customer')
if edit_customer.is_valid():
edit_customer.save()
if 'job-edit_job_site' in request.POST:
print("Editing Job Site")
edit_job_site = ViewJobSiteForm(request.POST, prefix='job')
print(request.POST)
if edit_job_site.is_valid():
edit_job_site.save()
print("Saving Jobsite")
if 'edit_job_site_equipment' in request.POST:
job_site_equipment_line = JobSiteEquipment.objects.filter(request.POST['equipment_line_id'])
edit_job_site_equipment = EditJobSiteEquipment(request.POST, instance=job_site_equipment_line)
if edit_job_site_equipment.is_valid():
edit_job_site_equipment.save()
if job_site:
jspk = job_site.pk
else:
jspk = 0
existing_equipment = JobSiteEquipment.objects.filter(job_site=jspk)
context = {
'form': edit_customer,
'form2': edit_job_site,
'all_job_sites': all_job_sites,
'job_site_id': jspk,
'existing_equipment': existing_equipment,
'all_equipment': Equipment.objects.all()
}
return render(request, 'customer/view_customer.html', context=context)