Как поместить другие классы моделей, принадлежащие (связанные) с основным классом модели. И как написать это в 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 мне нужно:

Поясняя это в шаблоне, мне нужно иметь эти другие вкладки (Дополнительные данные сотрудников, Наблюдения сотрудников и т.д.) в регистре сотрудников, как на изображении:

enter image description here

Как мне написать это в файле 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 для ссылки на него)

Вернуться на верх