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>