Advertisement
robertvari

Post model

Jan 2nd, 2020
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.46 KB | None | 0 0
  1. from django.db import models
  2. from django.db.models.signals import post_delete, pre_save
  3. from django.dispatch import receiver
  4. from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
  5. from django.conf import settings
  6. from django.utils.text import slugify
  7.  
  8. # get post upload folder
  9. def photo_directory_path(instance, filename):
  10.     return 'posts/{0}/{1}'.format(instance.author, filename)
  11.  
  12. class Post(models.Model):
  13.     author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete= models.CASCADE, related_name='posts')
  14.  
  15.     title = models.CharField(max_length=200)
  16.     description = models.TextField()
  17.     photo = models.ImageField(upload_to=photo_directory_path, blank=True)
  18.     likes = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='likes', blank=True)
  19.     picked = models.BooleanField(default=False)
  20.  
  21.     slug = models.SlugField(max_length=200, blank=True)
  22.     updated_on = models.DateTimeField(auto_now= True)
  23.     created_on = models.DateTimeField(auto_now_add=True)
  24.  
  25.     class Meta:
  26.         ordering = ['-created_on']
  27.  
  28.     def __str__(self):
  29.         return self.title
  30.  
  31. # delete post picture
  32. @receiver(post_delete, sender=Post)
  33. def file_cleanup(sender, instance, **kwargs):
  34.     if instance.photo:
  35.         os.remove(instance.photo.path)
  36.  
  37. # generate slug for posts
  38. @receiver(pre_save, sender=Post)
  39. def slug_generator(sender, instance, *args, **kwargs):
  40.     instance.slug = f'{slugify(instance.title)}-{int(time.time())}'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement