Пытаюсь сделать чаты, где люди могут общаться 1 на 1 или в группе:
Первоначально в голову пришла такая мысль:
сделать общую модель Chat и для личных чатов и для групп
Просто в личном чате будет всего 2 участника
К тому же встречал данную идею в интернете, что придало убежденности в ее правильности
Вот сделал:
Модель Chat
class Chat(models.Model):
class Type(models.TextChoices):
PERSONAL = 'personal'
GROUP = 'group'
class Accessibility(models.TextChoices):
PUBLIC = 'public'
PRIVATE = 'private'
type = models.CharField(
verbose_name='Тип',
max_length=15,
choices=Type.choices,
)
accessibility = models.CharField(
verbose_name='Доступность',
max_length=15,
choices=Accessibility.choices,
)
title = models.CharField(verbose_name='Заголовок', max_length=255, null=True)
description = models.TextField(verbose_name='Описание', null=True)
photo = FilerImageField(
verbose_name='Фото',
on_delete=models.SET_NULL,
null=True,
)
members = models.ManyToManyField(
verbose_name='Члены',
to='users.User',
through='Membership',
related_name='chats',
)
Проблемы, с которыми я не могу разобраться:
1. Много лишних полей: accessibility, title, description, photo нужны только для групповых чатов
Для личных чатов нужно только поле members (где будет только 2 пользователя) остальные NULL.
2. При получении списка чатов у личных чатов должна быть фотка 2-го пользователя и его имя, а также прочие атрибуты пользователя, а у групповых чатов отображаются поля из модели title и photo. Не получается эффективно извлечь список чатов с данными условиями.
Исходя из вышеперечисленных проблем мне кажется, что я двигаюсь не в правильном направлении