from django.db import models from django.contrib.auth.models import User from django.conf import settings from enum import Enum # Create your models here. class PostState(Enum): DRAFT = 0 PUBLISHED = 1 PROGRAMMED = 2 USER_SUBMITTED = 3 class Post(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) title = models.CharField(max_length=200) body = models.CharField(max_length=10000) url = models.CharField(max_length=200) date = models.DateTimeField('date published') state = models.IntegerField(default=0) style = models.IntegerField(default=0) image_url = models.CharField(max_length=100) def __str__(self): return self.title def top_comments(self): return self.comment_set.all()[:5] # return self.comment_set.annotate(ratings_num=count('voters')).order_by('-ratings_num')[:5] # return self.comment_set.order_by('voters_num').all()[:5] class Comment(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) post = models.ForeignKey(Post, on_delete=models.CASCADE, null=True) parent_comment = models.ForeignKey("self", on_delete=models.CASCADE, null=True) body = models.CharField(max_length=100) voters = models.ManyToManyField(User, related_name='voted_comments') date = models.DateTimeField('date published') def __str__(self): return self.body class Player(models.Model): name = models.CharField(max_length=100) post = models.ForeignKey(Post, on_delete=models.CASCADE) image_url = models.CharField(max_length=100) def __str__(self): return self.name # photo class Tag(models.Model): name = models.CharField(max_length=100) post = models.ForeignKey(Post, on_delete=models.CASCADE) def __str__(self): return self.name