Advertisement
Mochinov

Untitled

Mar 14th, 2022
1,101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.70 KB | None | 0 0
  1.  
  2. class CustomUser(AbstractBaseUser, PermissionsMixin):
  3.     """Расширенный пользователь"""
  4.  
  5.     phone_regex = RegexValidator(
  6.         regex=r'^\+?1?\d{9,15}$',
  7.         message="Phone number must be entered in the format."
  8.     )
  9.  
  10.     email = models.EmailField(verbose_name='Email', unique=True)
  11.     date_of_birth = models.DateField(verbose_name='Дата рождения', blank=True, null=True)
  12.     first_name = models.CharField(verbose_name='Имя', max_length=25, unique=True)
  13.     second_name = models.CharField(verbose_name='Фамилия', max_length=25, unique=True)
  14.     patronymic = models.CharField(verbose_name='Отчество', max_length=25, unique=True)
  15.     username = models.CharField(verbose_name='Пользователь', max_length=25, unique=True)
  16.     date_joined = models.DateTimeField(verbose_name='Дата регистрации', auto_now_add=True)
  17.     phone = models.CharField(verbose_name='Мобильный номер телефона', validators=[phone_regex], max_length=17, blank=True)
  18.     is_active = models.BooleanField(verbose_name='Статус активности', default=True)
  19.     is_staff = models.BooleanField(verbose_name='Является ли сотрудником', default=False)
  20.     hide_personal_data = models.BooleanField(verbose_name='Скрыть персональные данные:', default=False, blank=True)
  21.     user_photo = models.ImageField(verbose_name='Фото профиля', upload_to='users/personal-img/', null=True, blank=True)
  22.     gallery_collections = models.ManyToManyField('GalleryRef', blank=True, related_name='user_gallery_collections')
  23.  
  24.     objects = UserManager()
  25.  
  26.     USERNAME_FIELD = 'username'
  27.     REQUIRED_FIELDS = []
  28.  
  29.     def __str__(self):
  30.         return self.username
  31.  
  32.     def to_json(self):
  33.         return model_to_dict(self)
  34.  
  35.     __repr__ = __str__
  36.  
  37.     class Meta:
  38.         db_table = 'user'
  39.         verbose_name = 'Пользователь'
  40.         verbose_name_plural = 'Пользователи'
  41.  
  42.  
  43. class Notifications(models.Model):
  44.     """Уведомления пользователя"""
  45.  
  46.     user = models.ForeignKey(CustomUser, verbose_name='Пользователь', on_delete=models.CASCADE)
  47.     pub_date = models.DateTimeField(verbose_name='Время уведомления', auto_now_add=True)
  48.     text = models.TextField(verbose_name='Уведомление:')
  49.     title = models.CharField(verbose_name='Заголовок уведомления: ', max_length=255, blank=True)
  50.     is_read = models.BooleanField(verbose_name='Прочитано', default=False)
  51.    
  52.     def __str__(self):
  53.         return self.title
  54.    
  55.     def to_json(self):
  56.         return model_to_dict(self)
  57.  
  58.     __repr__ = __str__
  59.    
  60.     class Meta:
  61.         db_table = 'notifications'
  62.  
  63. class ResourceRating(models.Model):
  64.     """"""
  65.     class QualityСontrol(models.TextChoices):
  66.         LIKE = 'like', 'Нравиться'
  67.         DISLIKE = 'dislike', 'Не нравится'
  68.  
  69.     user = models.ForeignKey(CustomUser, verbose_name='Пользователь', on_delete=models.CASCADE )
  70.     quality_control = models.CharField(verbose_name='Оценка качества', max_length=12, choices=QualityСontrol.choices, null=False)
  71.  
  72.     def to_json(self):
  73.         return model_to_dict(self)
  74.  
  75.     class Meta:
  76.         db_table = 'resource_rating'
  77.  
  78. class Analytics(models.Model):
  79.     content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
  80.     object_id = models.PositiveIntegerField()
  81.     content_object = GenericForeignKey('content_type', 'object_id')
  82.  
  83.     resource_rating = models.ManyToManyField(ResourceRating)
  84.  
  85.     class Meta:
  86.         db_table = 'analytics'
  87.  
  88.     def to_json(self):
  89.         return model_to_dict(self)
  90.  
  91. class UserSourceAnalytics(models.Model):
  92.     """"""
  93.     views = models.BigIntegerField(verbose_name='Просмотры ресурса', default=0)
  94.     tags = GenericRelation('Analytics')
  95.  
  96.     def __str__(self):
  97.         return self.project.project_name
  98.  
  99.     def to_json(self):
  100.         return model_to_dict(self)
  101.  
  102.     __repr__ = __str__
  103.  
  104.     class Meta:
  105.         abstract = True
  106.  
  107.  
  108. class GalleryCollection(models.Model):
  109.     """"""
  110.     gallery = models.ImageField(verbose_name='Картина', upload_to='users/gallery-img/', null=True, blank=True)
  111.  
  112.     def to_json(self):
  113.         return model_to_dict(self)
  114.  
  115.     class Meta:
  116.         db_table = 'gallery_collection'
  117.         verbose_name = 'Галерея'
  118.         verbose_name_plural = 'Галерея'
  119.  
  120.  
  121.  
  122. class GalleryRef(models.Model):
  123.     """"""
  124.     gallery_collection = models.ForeignKey(GalleryCollection, on_delete=models.CASCADE,verbose_name='Галерея', related_name='user_gallery_collection')
  125.     user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, verbose_name='Пользователь')
  126.     description = models.TextField('Описание', null=True, blank=True)
  127.     public_date = models.DateTimeField(verbose_name='Дата публикации', auto_now_add=True)
  128.     draft = models.BooleanField(verbose_name='Черновик', default=True)
  129.  
  130.     def __str__(self):
  131.         return f'{self.user}'
  132.  
  133.     def to_json(self):
  134.         return model_to_dict(self)
  135.  
  136.     __repr__ = __str__
  137.  
  138.     class Meta:
  139.         db_table = 'gallery_ref'
  140.  
  141.    
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153. class GalleryCollectionSerializer(serializers.ModelSerializer):
  154.  
  155.     class Meta:
  156.         model = GalleryCollection
  157.         fields = '__all__'
  158.  
  159.  
  160. class GalleryRefSerializer(serializers.ModelSerializer):
  161.     gallery_collection = GalleryCollectionSerializer(
  162.         read_only=True,
  163.     )
  164.  
  165.     class Meta:
  166.         model = GalleryRef
  167.         fields = (
  168.             'id', 'public_date', 'description',  'draft',  'gallery_collection',
  169.         )
  170.  
  171.  
  172.  
  173.  
  174. class CustomUserSerializer(serializers.ModelSerializer):
  175.  
  176.     gallery_collections = GalleryRefSerializer(
  177.        read_only=True,  many=False
  178.     )
  179.  
  180.     class Meta:
  181.         model = CustomUser
  182.         fields = (
  183.             'id', 'email', 'date_of_birth', 'first_name',
  184.             'second_name', 'patronymic', 'username',
  185.             'date_joined', 'phone', 'is_active',
  186.             'is_staff', 'hide_personal_data', 'user_photo',
  187.             'gallery_collections',
  188.         )
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195. class GalleryCollectionSerializerViewSet(viewsets.ViewSet):
  196.  
  197.     def list(self, request):
  198.         queryset = GalleryCollection.objects.all()
  199.         serializer = GalleryCollectionSerializer(queryset, many=True)
  200.         print(serializer.data)
  201.         return Response(serializer.data)
  202.  
  203. class GalleryRefSerializerViewSet(viewsets.ViewSet):
  204.  
  205.     def list(self, request):
  206.         queryset = GalleryRef.objects.all()
  207.         serializer = GalleryRefSerializer(queryset, many=True)
  208.         print(serializer.data)
  209.         return Response(serializer.data)
  210.  
  211. class CustomUserSerializerViewSet(viewsets.ViewSet):
  212.  
  213.     def list(self, request):
  214.         queryset = CustomUser.objects.all()
  215.         serializer = CustomUserSerializer(queryset, many=True)
  216.         print(serializer.data)
  217.         return Response(serializer.data)
  218.  
  219.  
  220.  
  221.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement