• Как редактировать сущности, ссылающиеся на элемент из TabularInline в админке Django?

    @warkb Автор вопроса
    Ок. Модели:
    # модель автомобиля, на странице редактирования этой модели всё и происходит
    class Car(ModelMeta, models.Model):
        model = models.ForeignKey(
            'CarModel', related_name='Cars', null=True, verbose_name="Модель",
            on_delete=models.CASCADE)
        title = models.CharField(
            "Название",  max_length=200, blank=True, null=True)
        # ...
        # поля для seo и логики, не имеющие отношения к задаче
    
    # размеры автомобиля, находятся в TabularInline, я отобразил их на скриншоте
    class CarVolume(models.Model):
        l_name = models.IntegerField("№ длины")
        h_name = models.IntegerField("№ высоты")
        is_rear_drive = models.BooleanField("Задний привод")
        length = models.IntegerField("Длина, см")
        height = models.IntegerField("Высота, см")
        kx = models.FloatField("Повышающий коэф.")
        volume = models.FloatField("Объем")
        car = models.ForeignKey(
            'Car', on_delete=models.CASCADE, related_name='volumes',
            verbose_name="Модификация")
    
    # материал
    class Material(models.Model):
        title = models.CharField("Название", max_length=50)
        description = models.TextField("Описание", blank=True)
        used_for_walls_and_ceiling = models.BooleanField(
            "Используется для стен и потолка")
        used_for_floor = models.BooleanField("Используется для пола и арок")
    
    # толщина материала
    class MaterialThickness(models.Model):
        thickness = models.FloatField("Толщина, мм")
        material = models.ForeignKey(
            'Material', related_name='thicknesses', verbose_name="Материал",
            on_delete=models.CASCADE)
        description = models.TextField("Описание", blank=True)
    
    # повышающий коэффициент
    # та самая сущность, которую я хочу редактировать в TabularInline для размеров автомобиля
    class UpFactorForSizeAndThickness(models.Model):
        """повышающий коэффициент для толщины привязанный к размеру"""
        price_factor = models.FloatField("Повышающий коэффициент", default=1)
        size = models.ForeignKey(
            'CarVolume', on_delete=models.CASCADE, null=True)
        thickness = models.ForeignKey(
            'MaterialThickness', on_delete=models.CASCADE)


    На скриншоте - TabularInline для размеров. Я переопределил его шаблон, и теперь дополнительно вывожу поля для поля factor модели UpFactorForSizeAndThickness - те самые повышающие коэффициенты, привязанные к размеру и толщине.

    Сейчас переопределяю метод save_model для страницы админки автомобиля, чтобы вручную из POST присваивать значения полям. Это оказалось довольно трудоёмко, поэтому пока почитаю про formset, но если сможете дать ответ, буду очень признателен.
  • Как создать свою кастомную админку на Django?

    @warkb
    Дружище, спасибо большое за ответ. Возникла задача на проекте, и этот пост помог её решить