You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

59 lines
2.0 KiB

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.author_name}: {self.comment_text[:100]}"