diff options
Diffstat (limited to 'store/models.py')
| -rw-r--r-- | store/models.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/store/models.py b/store/models.py new file mode 100644 index 0000000..9e321fc --- /dev/null +++ b/store/models.py @@ -0,0 +1,59 @@ +from django.contrib.auth.models import AbstractUser +from django.db import models + +class User(AbstractUser): + avatar = models.ImageField(upload_to='avatars/', null=True, blank=True) + email = models.EmailField(unique=True) + phone = models.CharField(max_length=20, unique=True) + address = models.CharField(max_length=255, null=True, blank=True) + name = models.CharField(max_length=255, null=True, blank=True) + roles = models.JSONField(default=list) + + def save(self, *args, **kwargs): + if not self.roles: + self.roles = ['user'] + if (self.is_staff or self.is_superuser) and 'admin' not in self.roles: + self.roles.append('admin') + super().save(*args, **kwargs) + +class Book(models.Model): + title = models.CharField(max_length=255) + author = models.CharField(max_length=255) + publisher = models.CharField(max_length=255) + price = models.IntegerField() + stock = models.IntegerField() + isbn = models.CharField(max_length=20, unique=True) + cover = models.CharField(max_length=2048, null=True, blank=True) + description = models.TextField(null=True, blank=True) + + +class Order(models.Model): + STATUS_CHOICES = [ + (1, 'Pending'), + (2, 'Shipped'), + (3, 'Rejected'), + ] + buyer = models.ForeignKey(User, on_delete=models.CASCADE) + address = models.CharField(max_length=255) + createdAt = models.DateTimeField(auto_now_add=True) + status = models.SmallIntegerField(choices=STATUS_CHOICES, default=1) + + @property + def total_price(self): + return sum(item.total_price for item in self.items.all()) + +class OrderItem(models.Model): + order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='items') + book = models.ForeignKey(Book, on_delete=models.CASCADE) + amount = models.IntegerField() + bookPrice = models.IntegerField() + + @property + def total_price(self): + return self.bookPrice * self.amount + +class Comment(models.Model): + user = models.ForeignKey(User, on_delete=models.CASCADE) + book = models.ForeignKey(Book, on_delete=models.CASCADE) + content = models.TextField() + createdAt = models.DateTimeField(auto_now_add=True) |
