Задать вопрос
@Tiran_94
Python Django

Как лучше организовать связи models в Django?

Помогите пожалуйста, как лучше организовать связи между моделями?
Пробовал несколько вариантов, но как то не удачно получилось

Основная модель через какую все выводится это SparePart, остальное как дополнение

from django.db import models
from django.utils import timezone


class SparePart(models.Model):
    name_part = models.CharField(verbose_name='Имя запчасти', max_length=120)
    number_part = models.CharField(verbose_name='Номер запчасти', max_length=70, blank=True, null=True)
    text_info = models.TextField(blank=True, null=True, verbose_name='Описание')
    pub_date = models.DateTimeField(verbose_name='Дата публикации')
    car_part = models.ManyToManyField("ModelCar", verbose_name='Модель')
    modification_car = models.ManyToManyField('ModificationCar', verbose_name='Модификация')
    engine_car = models.ManyToManyField('EngineCar', verbose_name='Двигатель')
    main_image = models.ImageField(upload_to='product_image/main/', blank=True, null=True)
    spare_image = models.ManyToManyField('ImageProduct', verbose_name='Изображение')
    type_spare_part = models.ForeignKey('TypeSparePart', null=True, verbose_name='Тип Запчасти', on_delete=models.CASCADE)

    def __str__(self):
        return self.name_part

    class Meta:
        verbose_name = "Запчасть"
        verbose_name_plural = "Запчасти"


class MakeCar(models.Model):
    name_make_car = models.CharField(verbose_name='Производитель', max_length=100)

    def __str__(self):
        return self.name_make_car

    class Meta:
        verbose_name = "Производитель"
        verbose_name_plural = "Производители"


class ModelCar(models.Model):
    name_model_car = models.CharField(verbose_name='Модель', max_length=100)
    car_model = models.ForeignKey("MakeCar", verbose_name='Производитель', on_delete=models.CASCADE)

    def __str__(self):
        return '{} - {}'.format(self.car_model.name_make_car, self.name_model_car)

    class Meta:
        verbose_name = "Модель"
        verbose_name_plural = "Модели"


class ModificationCar(models.Model):
    modification_car = models.CharField(max_length=50, verbose_name='Модификация')

    def __str__(self):
        return str(self.modification_car)

    class Meta:
        verbose_name = "Модификация Авто"
        verbose_name_plural = "Модификации Авто"


class TypeSparePart(models.Model):
    name_type = models.CharField(max_length=100)

    def __str__(self):
        return str(self.name_type)

    class Meta:
        verbose_name = "Тип Запчасти"
        verbose_name_plural = "Тип Запчасти"


class EngineCar(models.Model):
    name_engine = models.CharField(max_length=100)

    def __str__(self):
        return str(self.name_engine)

    class Meta:
        verbose_name = "Двигатель"
        verbose_name_plural = "Двигателя"


class ImageProduct(models.Model):
    image_product = models.ImageField(upload_to='product_image/', blank=True, null=True)

    def __str__(self):
        return str(self.image_product)

    class Meta:
        verbose_name = "Изображение"
        verbose_name_plural = "Изображения"
  • Вопрос задан
  • 125 просмотров
Подписаться 1 Средний 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Разработка на Python
    1 год
    Далее
Пригласить эксперта
Ваш ответ на вопрос

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

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