@Lepilov

Как создать дополнительную таблицу для свзи между моделями?

Есть две модели Module(модуль) и ParentCategory(категори). базе между собой они никак не свзязаны.
class Modules(models.Model):
    .....

class ParentCategory(models.Model):
    ....


Я хочу сделать связь между ними по следующему принципу. Один модуль содержит несколько категорий. Описал эту структуру словарем где ключ словаря - название модуля а значение список из категорий принадлежащих этому модулю.
pc_to_modules_assign = {
                            "Strategic Sourcing": ['COMMON S2P', 'COMMON SOURCING - SXM', 'SERVICES', 'SOURCING'],
                            "Supplier Management": ['COMMON S2P', 'COMMON SOURCING - SXM', 'SERVICES', 'SXM'],
                            "Spend Analytics": ['COMMON S2P', 'SERVICES', 'Spend Analytics'],
                            "Contract Management": ['COMMON S2P', 'SERVICES', 'CLM'],
                            "e-Procurement": ['COMMON S2P', 'SERVICES', 'eProcurement'],
                            "Invoice-to-Pay": ['COMMON S2P', 'SERVICES', 'I2P'],
                            "AP Automation": ['COMMON S2P', 'SERVICES', 'I2P', 'AP'],
                            "Strategic Procurement Technologies": ['COMMON S2P', 'COMMON SOURCING - SXM', 'SERVICES',
                                                                   'SOURCING', 'SXM', 'Spend Analytics', 'CLM'],
                            "Procure-to-Pay": ['COMMON S2P', 'SERVICES', 'eProcurement', 'I2P'],
                            "Source-to-Pay": ['COMMON S2P', 'COMMON SOURCING - SXM', 'SERVICES',
                                              'SOURCING', 'SXM', 'Spend Analytics', 'CLM', 'eProcurement', 'I2P']
                             }


В списке категорий есть одна главная - primary. Подскажите какие связи надо использовать в подобной модели или какие примерно поля нужны. Что то вроде

class PCtoModules(models.Model):
m = .....Modules
pc = ....ParentCategory
primary = models.BooleanField(default=False)
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
@bubaley
Для решения такой задачи нужно использовать ManyToMany relation.
В класс Modules нужно добавить строчку
parent_categories= models.ManyToManyField('ParentCategory', related_name='modules', through='ModuleParentCategory')

И добавляет таблицу throught
class ModuleParentCategory(models.Model):
    module = models.ForeignKey(Module, on_delete=models.CASCADE)
    parent_category = models.ForeignKey(ParentCategory, on_delete=models.CASCADE)
    primary = models.BooleanField(default=False)

Для заполнения или редактирования этой связи можете ознакомиться с документацией по ManyToMany with throught
https://django.fun/docs/django/ru/3.0/topics/db/models/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы