Как правильно сохранить несколько форм django в базе данных? Повысить производительность

#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:

  1. Поместите весь приведенный выше код в транзакцию.
  2. Сделайте Employee наследство User . Подробнее о наследовании моделей в Django читайте здесь.
  3. Вы создаете Employee объект, затем обновляете его с помощью Employees.objects.filter(id=emp.id).update(Code=...) . Просто измените код перед первым сохранением
  4. django-modelcluster может вам помочь. Это стоит попробовать.