@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 = "Изображения"
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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