123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- from django.contrib.auth.models import User
- from django.db import models
- from softdelete.models import SoftDeleteModel
- # Create your models here.
- class Client(SoftDeleteModel):
- fio = models.CharField(verbose_name=u'ФИО', max_length=500)
- user = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name=u'Базовый пользователь')
- phone = models.CharField(verbose_name=u'Телефон', max_length=15)
- class Meta:
- verbose_name = "Клиент"
- verbose_name_plural = "Клиенты"
- def __str__(self):
- return f"{self.pk}. {self.fio}"
- class ProductCategory(SoftDeleteModel):
- name = models.CharField(verbose_name=u'Имя', max_length=255)
- class Meta:
- verbose_name = "Категория"
- verbose_name_plural = "Категории"
- def __str__(self):
- return f"{self.name}"
- class Product(SoftDeleteModel):
- name = models.CharField(verbose_name=u'Имя', max_length=255)
- categories = models.ManyToManyField(ProductCategory, verbose_name=u'Категории', blank=True)
- price = models.BigIntegerField(verbose_name=u'Цена', )
- class Meta:
- verbose_name = "Продукт"
- verbose_name_plural = "Продукты"
- def display_rub(self):
- return self.price / 100
- display_rub.short_description = "В рублях"
- def display_categories(self):
- categories = self.categories.all()
- result = ""
- for category in categories:
- result += f"{category}, "
- return result[:-2]
- display_categories.short_description = "Категории"
- def __str__(self):
- return f"{self.name}"
- class ClientBasket(SoftDeleteModel):
- client = models.ForeignKey(User, verbose_name=u'Клиент', on_delete=models.CASCADE)
- product = models.ForeignKey(Product, verbose_name=u'Продукт', on_delete=models.CASCADE)
- class Meta:
- verbose_name = "Карзина пользователя"
- verbose_name_plural = "Карзины пользователей"
- def clear_basket(self):
- ClientBasket.objects.filter(client=self.client).delete()
- class OrderItem(SoftDeleteModel):
- client = models.ForeignKey(User, verbose_name=u'Клиент', on_delete=models.CASCADE)
- product = models.ForeignKey(Product, verbose_name=u'Продукт', on_delete=models.CASCADE)
- count = models.PositiveSmallIntegerField(verbose_name=u'Количество', default=1)
- class Meta:
- verbose_name = "Позиция в ордере"
- verbose_name_plural = "Позиции в ордерах"
- def __str__(self):
- return f'{self.product} {self.count}шт.'
- class Order(SoftDeleteModel):
- order_num = models.PositiveIntegerField(verbose_name=u'Номер ордера')
- client = models.ForeignKey(User, verbose_name=u'Клиент', on_delete=models.CASCADE)
- status = models.PositiveSmallIntegerField(verbose_name=u'Статус', default=0)
- items = models.ManyToManyField(OrderItem, verbose_name=u'Позиции', blank=True)
- class Meta:
- verbose_name = "Ордер"
- verbose_name_plural = "Ордера"
- def display_status(self):
- if self.status == 0:
- return "Создан"
- elif self.status == 1:
- return "Ждет оплаты"
- elif self.status == 2:
- return "Оплачен"
- elif self.status == 3:
- return "Доставлен"
- elif self.status == 10:
- return "Отменен"
- else:
- return "Ошибка"
- display_status.short_description = "Статус"
- def display_items(self):
- result = ""
- for item in self.items.all():
- result += f'{item}, '
- return result[:-2]
- display_items.short_description = "Позиции"
- def __str__(self):
- return f'Ордер №{self.order_num} Клиент: {self.client}'
- class Transaction(SoftDeleteModel):
- order = models.ForeignKey(Order, verbose_name=u'Ордер', on_delete=models.CASCADE)
- old_status = models.PositiveSmallIntegerField(verbose_name=u'Старый статус', )
- new_status = models.PositiveSmallIntegerField(verbose_name=u'Новый статус', )
- class Meta:
- verbose_name = "Транзакция"
- verbose_name_plural = "Транзакции"
- def __str__(self):
- return f'{self.order.order_num} {self.old_status}->{self.new_status}'
|