from django.db import models from posts.models import Post from django.utils import timezone class CommentAuthor(models.Model): """Валидация автора коммента. Если коментатор оставил секретную фразу, то от нее вычисляется хеш, который сравнивается с тем, который есть в базе для этого сочетания author_name:hash. """ author_name = models.CharField("Имя автора", max_length=60) author_secret_hash = models.CharField( "Хеш секрета", max_length=256, blank=True, null=True ) def __str__(self): return self.author_name class Meta: # сделать сочетание полей уникальным unique_together = (("author_name"),) def is_valid(self) -> bool: if self.author_name and self.author_secret_hash: return True def get_anonym_id() -> int: # тут бы еще проверку на существование такого пользователя. Если # его нет - создать obj, result = CommentAuthor.objects.get_or_create(author_name="Anonym") return obj.id class Comment(models.Model): """Класс для комента.""" post = models.ForeignKey(Post, on_delete=models.CASCADE) author = models.ForeignKey( CommentAuthor, on_delete=models.CASCADE, default=get_anonym_id ) nickname = models.CharField("имя автора", max_length=60, blank=True, null=True) reply = models.ForeignKey("self", on_delete=models.SET_NULL, blank=True, null=True) comment_text = models.TextField() date = models.DateTimeField(default=timezone.now) def is_anonym(self) -> bool: if self.author.id == get_anonym_id(): return True else: return False def __str__(self): return f"{self.nickname}: {self.comment_text[:100]}"