Açıklama Yok

models.py 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. from django.db import models
  2. from django_google_maps import fields as map_fields
  3. from colorfield.fields import ColorField
  4. from smart_selects.db_fields import (
  5. ChainedForeignKey,
  6. ChainedManyToManyField,
  7. GroupedForeignKey,
  8. )
  9. from django.db.models import Q
  10. import googlemaps
  11. from django.contrib.gis.geos import fromstr
  12. from django.conf import settings
  13. import csv
  14. import haversine as hs
  15. from mptt.models import MPTTModel, TreeForeignKey
  16. from django.contrib.auth.models import User
  17. from django.db.models.signals import post_save
  18. from django.dispatch import receiver
  19. from shaqfindbed.utils import get_current_user
  20. # Create your models here.
  21. class GenericModel(models.Model):
  22. created_at = models.DateTimeField(auto_now_add=True, null=True)
  23. updated_at = models.DateTimeField(auto_now=True)
  24. created_by = models.ForeignKey(User, null=True, editable=False, related_name='%(class)s_created', on_delete=models.SET_NULL)
  25. modified_by = models.ForeignKey(User, null=True, editable=False, related_name='%(class)s_modified', on_delete=models.SET_NULL)
  26. '''
  27. def save(self, *args, **kwargs):
  28. user = get_current_user()
  29. print("user "+user.is_authenticated())
  30. if user and user.is_authenticated():
  31. self.modified_by = user
  32. if not self.id:
  33. self.created_by = user
  34. super(GenericModel, self).save(*args, **kwargs)
  35. '''
  36. class Meta:
  37. abstract = True
  38. class StoreCat(MPTTModel):
  39. name = models.CharField(max_length=50, unique=True)
  40. parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
  41. class MPTTMeta:
  42. order_insertion_by = ['name']
  43. def __str__(self):
  44. return f"{self.name}"
  45. class Store(GenericModel, models.Model):
  46. name = models.CharField(max_length=200)
  47. address_text = models.TextField(blank=True, null=True)
  48. #address = models.CharField(max_length=100)
  49. address = map_fields.AddressField(max_length=200)
  50. geolocation = map_fields.GeoLocationField(max_length=100)
  51. tel = models.CharField(max_length=100, null=True, blank=True)
  52. line_id = models.CharField(max_length=100, null=True, blank=True)
  53. email = models.EmailField(null=True, blank=True)
  54. store_cat = TreeForeignKey('StoreCat', on_delete=models.SET_NULL, null=True)
  55. #created_at = models.DateTimeField(auto_now_add=True, null=True)
  56. #updated_at = models.DateTimeField(auto_now=True)
  57. def __str__(self):
  58. return f"{self.name}"
  59. class ProductType(MPTTModel):
  60. name = models.CharField(max_length=50, unique=True)
  61. parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
  62. class MPTTMeta:
  63. order_insertion_by = ['name']
  64. def __str__(self):
  65. return f"{self.name}"
  66. class Product(GenericModel, models.Model ):
  67. name = models.CharField(max_length=200)
  68. code = models.CharField(max_length=200)
  69. product_type = TreeForeignKey('ProductType', on_delete=models.SET_NULL, null=True)
  70. description = models.TextField(blank=True, null=True)
  71. store = models.ForeignKey('Store', on_delete=models.CASCADE, null=True, blank=False)
  72. price = models.DecimalField(null=True, blank=True, decimal_places=2, max_digits=7)
  73. details = models.JSONField(null=True, blank=True)
  74. n_unit = models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True)
  75. unit_name = models.CharField(max_length=200, null=True)
  76. def __str__(self):
  77. return f"{self.name} {self.code}"
  78. class ProductSKU(GenericModel, models.Model ):
  79. sku = models.CharField(max_length=200)
  80. product = models.ForeignKey('Product', on_delete=models.CASCADE, null=True)
  81. description = models.TextField(blank=True, null=True)
  82. price = models.DecimalField(null=True, blank=True, decimal_places=2, max_digits=7)
  83. details = models.JSONField(null=True, blank=True)
  84. n_unit = models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True)
  85. unit_name = models.CharField(max_length=200, null=True)
  86. class Photo(GenericModel, models.Model):
  87. name = models.CharField(max_length=200, blank=True)
  88. photo = models.ImageField(upload_to="uploads/%Y/%m/%d/", blank=False, verbose_name="Photo")
  89. product = models.ForeignKey('Product', on_delete=models.CASCADE, null=True)
  90. class Profile(models.Model):
  91. user = models.OneToOneField(User, on_delete=models.CASCADE)
  92. bio = models.TextField(max_length=500, blank=True)
  93. location = models.CharField(max_length=30, blank=True)
  94. birth_date = models.DateField(null=True, blank=True)
  95. @receiver(post_save, sender=User)
  96. def create_user_profile(sender, instance, created, **kwargs):
  97. if created:
  98. Profile.objects.create(user=instance)
  99. @receiver(post_save, sender=User)
  100. def save_user_profile(sender, instance, **kwargs):
  101. try:
  102. instance.profile.save()
  103. except:
  104. Profile.objects.create(user=instance)