Как реализовать модели?

У меня есть 2-а приложения(Р) c моделями(М):

  1. products Р

    1.1. Product М - модель с товарами и базовой информацией о нём эта информация будет у всех товаров одинаковая как цена или количество

  2. catalog Р

    2.1. Category М - модель с категориями к примеру процессоры и видеокарты

    2.1.1. Characteristic М - подмодель Category с уникальными характеристиками для этой категории к примеру у категории процессоры это сокет а у видеокарты тип памяти

    2.1.1.1. Content М - значение этой характеристики к примеру сокет может быть АМ4 ИЛИ АМ1

Теперь о связях:

Product (Т - товары) связаны один ко многим с категориями у одной категории может быть много товаров

class Product(models.Model):
    categories = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='Категория')

Category (К - категория) является самой верхней моделью

class Category(models.Model):
    name = models.CharField('Название категории', max_length=30)

Characteristic (НХ - название характеристики) - связана один ко многим с каталогом у одного каталога может быть много характеристик

class Characteristic(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='Категория')
    name = models.CharField('Название характеристики', max_length=50)

Content (З - значение) - связь один ко многим с характеристикой у одной характеристики может быть много значений

class Content(models.Model):
    characteristic = models.ForeignKey(Characteristic, on_delete=models.CASCADE, verbose_name='характеристика')
    content = models.CharField(verbose_name=characteristic.name, unique=True, max_length=150)

Как это выглядит в графическом плане чтобы лучше понять:

схема

Как должно работать:

Когда мы выбираем товару категорию к которой он будет привязан категория будет передавать модели с товарами характеристики со значениями специфичны для данной категории

Вопрос такой как это сделать


Ответы (1 шт):

Автор решения: franmag

Ты можешь получить доступ к характеристикам что привязаны к категории через атрибут characteristic_set у объекта категории. То есть твой полный код должен выглядеть как-то так:

Product.objects.get(pk = 'тут ты должен указать primary key для продукта').categories.characteristic_set.all()

Более подробно ты можешь прочитать тут

→ Ссылка