Django: Как добавить посторонний ключ в зависимую форму, в мульти-форму отправки?

Прости логику структуры таблицы, приведенной ниже, пример. Это означало лишь простой пример ситуации, в которой я нахожусь.

Таким образом, ситуация в том, что я хочу создать страницу формы для сотрудников, на которой отдел или линейный менеджер могут уже существовать или не существовать. Поэтому я заменяю раскрывающийся список полем формы для внешнего ключа, чтобы при необходимости их можно было создать за один шаг для пользователя. Тем не менее, с такой зависимостью, я не делаю правильные вещи, чтобы заставить ее работать.

Если вам нужно больше деталей, пожалуйста, спросите.

Если вы можете сделать Название более точным, пожалуйста, сделайте.

Спасибо за ваше время.

модель

class Employee(models.Model):
    name = models.CharField()
    age = models.CharField()
    line_manager = models.ForeignKey(LineManager)
    department = models.ForeignKey(Department)

class LineManager(models.Model):
    manager_name = models.CharField()
    department = models.ForeignKey(Department)

class Department(models.Model):
    department_name = models.CharField()

форма

class EmployeeForm(ModelForm):
    class Meta:
        model = Employee
        fields = ['name',
                  'age'
                  #'line_manager' Not needed
                  #'department' Not needed]
        exclude = ('line_manager', 'department')

class LineManagerForm(ModelForm):
    class Meta:
        model = LineManager
        fields = ['manager_name']
        exclude = ('department') 

 # There is a basic form for Department, as well.

Посмотреть

class AddEmployeeView(View):
    forms = {'department': DepartmentForm(self.request.POST or None),
             'line_manager': LineManagerForm(self.request.POST or None),
             'employee': EmployeeForm(self.request.POST or None)]}

    def get(self, request, *args, **kwargs):
        form_list = [form for _,form in forms]
        return render (request, 'app/temp.html', {'forms': form_list}

    def post(self, request, *args, **kwargs):
        if all([form.is_valid() for _,form in forms]):
            department_data = forms['department'].cleaned_data
            department_obj, _ = Department.objects.get_or_create(department_data)

            line_manager_instance = forms['line_manager'].instance
            line_manager_instance.department = department_obj
            line_manager_data = forms['line_manager'].cleaned_data
            line_manager_obj, _ = LineManager.objects.get_or_create(line_manager_data)

            employee_instance = forms['employee'].save(commit=False)
            employee_instance.department = department_obj
            employee_instance.line_manager = line_manager_obj
            employee_instance.save()

HTML

<form method="POST">
    {% csrf_token %}
    {% form in forms %}
        {{ form.as_p }}
    {% endform %}
<input type='submit'/>
</form>

0 ответов

Другие вопросы по тегам