class User(models.Model): name = models.CharField(max_length=100) age = models.IntegerField(blank=True, null=True) created = models.DateTimeField(default=now) modified = models.DateTimeField(auto_now=True) gender = models.EnumField(Gender, blank=True, null=True) __str__ = (lambda self: self.name)
class Vote(models.Model): """ A single vote cast for a comment. """ author = models.ForeignKey( settings.AUTH_USER_MODEL, related_name="votes", on_delete=models.PROTECT ) comment = models.ForeignKey( "Comment", related_name="votes", on_delete=models.CASCADE ) choice = EnumField(Choice, _("Choice"), help_text=_("Agree, disagree or skip")) created = models.DateTimeField(_("Created at"), auto_now_add=True) objects = VoteQuerySet.as_manager() class Meta: unique_together = ("author", "comment") ordering = ["id"] def __str__(self): comment = truncate(self.comment.content, 40) return f"{self.author} - {self.choice.name} ({comment})" def clean(self, *args, **kwargs): if self.comment.is_pending: msg = _("non-moderated comments cannot receive votes") raise ValidationError(msg)