#mysql #database #django #forms
#mysql #База данных #django #формы
Вопрос:
Я хочу сохранить несколько форм django в базе данных хорошим способом, потому что сохранение этих форм на сервере занимает очень много времени. формы связаны друг с другом, поэтому я использую метод последовательного сохранения «одна форма за другой». Как я могу поддерживать свои формы для быстрого сохранения в базе данных.
Код форм:
employee_main=EmployeesForm(request.POST)
employee_administrative=EmployeesAdminstrativeForm(request.POST)
employee_stay=EmployeesStayForm(request.POST,request.FILES)
employee_dependents=EmployeesDependentsForm(request.POST,request.FILES,prefix="u")
employee_insurance=EmployeesInssuranceForm(request.POST,request.FILES)
employee_security=EmployeesSecurityForm(request.POST,request.FILES)
if employee_main.is_valid() and employee_administrative.is_valid() and employee_stay.is_valid() and employee_dependents.is_valid() and employee_insurance.is_valid() and employee_security.is_valid():
emp=employee_main.save(commit=False)
emp.save()
emp_ad=employee_administrative.save(commit=False)
emp_ad.employee_id=emp.id
emp_ad.save()
jobtitle_code=JobTitle.objects.get(id=emp_ad.jobtitle_id).Code
Employees.objects.filter(id=emp.id).update(Code=jobtitle_code "-" str(emp_ad.employee_id 25))
Employees.objects.filter(id=emp_ad.moder_id).update(ismodeer=True)
emp_s=employee_stay.save(commit=False)
emp_s.employee_id=emp.id
emp_s.save()
emp_dd=employee_dependents.save(commit=False)
emp_dd.employee_id=emp.id
emp_dd.save()
emp_ss=employee_insurance.save(commit=False)
emp_ss.employee_id=emp.id
emp_ss.save()
from authentication.models import users
user=users(employee_id=emp.id,UserName=request.POST["UserName"],Password=request.POST["Password"],isadmin=0)
user.save()
return HttpResponseRedirect("/employees/all_employees/")
Ответ №1:
- Поместите весь приведенный выше код в транзакцию.
- Сделайте
Employee
наследствоUser
. Подробнее о наследовании моделей в Django читайте здесь. - Вы создаете
Employee
объект, затем обновляете его с помощьюEmployees.objects.filter(id=emp.id).update(Code=...)
. Просто измените код перед первым сохранением - django-modelcluster может вам помочь. Это стоит попробовать.