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-функцию или написать внутри класса модели?
Большое спасибо!