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
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]}"
|
|
|