Django - Изменение статуса заказа в моделях

Всем доброго дня. Я работаю над некоторым унаследованным кодом, который написан очень плохо. Это сайт электронной коммерции для произведений искусства, и у него нет админ-панели для отслеживания заказов. Вместо этого нам приходится использовать Django Admin Panel! Да, это действительно ужасно, но давайте пропустим эту часть.

У меня есть модель для заказов:

class Order(models.Model):
    user = models.ForeignKey(
        AuthUsers,
        verbose_name=_("Пользователь"),
        related_name="orders",
        on_delete=models.DO_NOTHING,
    )
    status = models.CharField(
        _("Статус"), max_length=100, choices=OrderStatusChoices.choices)
    sub_total = models.FloatField(_("Под итог"))
    discount = models.FloatField(_("Скидки"), null=True, blank=True)
    total = models.FloatField(_("Итого"))
    created_at = models.DateTimeField(_("Оформлено"), auto_now_add=True)
    updated_at = models.DateTimeField(_("Обновлено"), auto_now=True)
    works = models.ManyToManyField(
        "OrderItems", verbose_name=_("Произведения"), related_name="orders"
    )

Модель для самого произведения искусства:

class Works(models.Model):
    u_id = models.CharField(
        _("Уникальный артикль (генерируется автоматически)"),
        blank=True,
        null=True,
        max_length=100,
    )
    section = models.ForeignKey(Sections, verbose_name=_(
        'Oтдел'), related_name='work_section', null=True, on_delete=models.DO_NOTHING)
    slug = models.SlugField(
        "Дополнение к названию ссылки (генерируется автоматически)",
        default="no-slug",
        blank=True, max_length=255
    )
    author = models.ForeignKey(
        Authors,
        verbose_name=_("Автор"),
        related_name="work_author",
        on_delete=models.DO_NOTHING,
    )
    genre = models.ManyToManyField(
        Categories, verbose_name=_("жанр"), related_name="art_works"
    )
    # category = models.ForeignKey(Categorization, verbose_name=_(
    #     "Категория"), related_name="work_category", null=True, on_delete=models.CASCADE)
    name = models.CharField(_("Название"), max_length=255)
    description = models.TextField(_('Описание'), null=True, blank=True)
    type = models.ForeignKey(WorkType, verbose_name=_(
        'Bид'), related_name="work_type", blank=True, null=True, on_delete=models.DO_NOTHING)
    period = models.ForeignKey(Period,
                               verbose_name=_('период'), related_name="work_period", blank=True, null=True,
                               on_delete=models.DO_NOTHING)
    flow = models.ForeignKey(Flow,
                             verbose_name=_('течение'), related_name="work_flow", blank=True, null=True,
                             on_delete=models.DO_NOTHING)
    show_in_service = models.ManyToManyField(Services, verbose_name=_('сервисы'), related_name="artworks", blank=True,
                                             null=True)

    size = models.CharField(_("Размер"), max_length=50, blank=True, null=True)
    size_measure = models.CharField(
        _('Измерение'), choices=SizeChoices.choices, default='diameter', max_length=100)
    signature = models.CharField(
        _("Подпись (положение подписи)"), max_length=255, blank=True, null=True)
    country = models.ForeignKey(
        Country,
        verbose_name=_("Страна"),
        related_name="art_works",
        on_delete=models.SET_NULL,
        blank=True,
        null=True,
    )
    regions = models.ManyToManyField(Region, verbose_name=_(
        "Регионы"), related_name="work_regions", blank=True)
    price = models.FloatField(_("Цена"), max_length=100, blank=True, null=True)
    quantity = models.IntegerField(_("Количество"), null=True)
    discount = models.OneToOneField(
        "Discounts",
        verbose_name=_("Скидка"),
        related_name="art_work",
        on_delete=models.SET_NULL,
        blank=True,
        null=True,
    )
    shoppable = models.BooleanField(_("Доступно для продажи"), default=True)

Модель для тележки:

class CartItem(models.Model):
    art_work = models.ForeignKey(
        Works,
        verbose_name=_("Произведение"),
        related_name="cart_items",
        on_delete=models.CASCADE,
    )
    status = models.CharField(
        _("Cтатус"), choices=CartItemChoices.choices, default="new", max_length=100
    )

    def __str__(self) -> str:
        return f"{self.art_work}({self.status})"

В модели "Заказ" вы можете увидеть 'статус', когда администратор входит в систему и меняет статус заказа на 'обработан', как я могу автоматически изменить статус в других моделях? Должен ли я написать какую-то view-функцию или написать внутри класса модели?

Большое спасибо!

Вернуться на верх