from django.core.validators import MinValueValidator, MaxValueValidator from django.conf import settings from django.db import models from PIL import Image class Ticket(models.Model): # Your Ticket model definition goes here title = models.CharField("Titre", max_length=100) desc = models.CharField("Description", max_length=8192) user = models.ForeignKey( to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE) image = models.ImageField() time_created = models.DateTimeField(auto_now_add=True) review = models.ForeignKey(to='reviews.Review', on_delete=models.SET_NULL, related_name='has_review', null=True) IMAGE_SIZE = (400, 400) def resize_image(self): image = Image.open(self.image) image.thumbnail(self.IMAGE_SIZE) image.save(self.image.path) def save(self, *args, **kwargs): super().save(*args, **kwargs) self.resize_image() class Review(models.Model): ticket = models.ForeignKey(to=Ticket, on_delete=models.CASCADE, related_name='of_ticket', null=True) rating = models.PositiveSmallIntegerField( # validates that rating must be between 0 and 5 validators=[MinValueValidator(0), MaxValueValidator(5)]) headline = models.CharField("titre", max_length=128) comment = models.CharField("commentaire", max_length=8192, blank=True) user = models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE) time_created = models.DateTimeField(auto_now_add=True) class UserFollows(models.Model): # Your UserFollows model definition goes here user = models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="following", null=True) followed_user = models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="followed", null=True) starting_date = models.DateTimeField(auto_now_add=True) class Meta: # ensures we don't get multiple UserFollows instances # for unique user-user_followed pairs unique_together = ('user', 'followed_user', ) def __str__(self): return f'{self.user} -> {self.followed_user}'