Как поместить другие классы моделей, принадлежащие (связанные) с основным классом модели. И как написать это в Views.py. (Это не FK)
У меня есть основная модель, называемая "Сотрудники", и мне нужно связать с ней еще 16 классов моделей (Дополнительные данные сотрудников, Наблюдения сотрудников и т.д.) в том же приложении. Как лучше всего записать эти классы в models.py?
Может ли быть так?
class Employees(models.Model):
class Meta:
db_table = "employees"
#fields
#fields
class EmployeesObs(models.Model):
class Meta:
db_table = "employeesobs"
#fields
#fields
class EmployeesAdditionalData(models.Model):
class Meta:
db_table = "employeesaditional"
#fields
#fields
Теперь, в этом views.py мне нужно:
Поясняя это в шаблоне, мне нужно иметь эти другие вкладки (Дополнительные данные сотрудников, Наблюдения сотрудников и т.д.) в регистре сотрудников, как на изображении:
Как мне написать это в файле views.py? Я использую представления на основе классов. Может ли кто-нибудь помочь мне, приведя пример кода, функции или документации?
Часть кода в CBV:
class AddEmployeesView(SuccessMessageMixin, CreateView):
model = Employees
form_class = EmployeesForm
template_name = '../templates/employees/form_employees.html'
success_url = reverse_lazy('list_Employees')
success_message = "Employees %(EmployeesNome)s Added!"
class EditEmployeesView(SuccessMessageMixin, UpdateView):
model = Employees
form_class = EmployeesForm
template_name = '../templates/employees/form_employees.html'
success_url = reverse_lazy('list_Employees')
success_message = "Employees %(EmployeesNome)s Edited!"
Я пытался поместить другие названия моделей в часть "модель" CBV, но получил ошибки.
Вам необходимо использовать внешний ключ к вашей Employee
модели :
class Employee(models.Model):
class Meta:
db_table = "employees"
#fields
#fields
class EmployeesObs(models.Model):
class Meta:
db_table = "employeesobs"
employee = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='observations')
#fields
class EmployeesAdditionalData(models.Model):
class Meta:
db_table = "employeesaditional"
employee = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='additional_data')
#fields
Тогда вы можете использовать CBV и для этих моделей. Вы можете либо добавить одно наблюдение за один раз, либо использовать inline formset для добавления/редактирования нескольких дочерних элементов одновременно. Только имейте в виду, что эти вкладки не могут быть доступны до первого создания сотрудника (потому что вам нужен ID для ссылки на него)