Мне было трудно выполнить эту задачу, и мне кажется, что я не могу получить помощь, куда бы я ни повернулся. Я пытаюсь отправить Memo
s конкретному пользователю group
s в Django. Каждый пользователь в каждом group
должен получить Memo
и иметь возможность изменить BooleanField
на True
, чтобы показать, что он его прочитал.
Затем мне нужно будет получить доступ к количеству пользователей, которые получили и пометили BoolenField
как True
, чтобы я мог создать таблицу в шаблоне с надписью [3/31 Read] и т. Д. .
Я бы не хотел использовать GenericForeignkey
s, если это возможно, и я хотел бы сохранить его как одну модель, если это возможно, но я знаю, что это может не сработать. В настоящее время я пытался это сделать:
class Memo(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date_time = models.DateTimeField(default=timezone.now)
sender = models.ForeignKey(User, on_delete=models.CASCADE)
receiver = models.ManyToManyField(Group)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('memos-detail', kwargs={'pk': self.pk})
Я собирался получить доступ к каждому пользователю (получателю) в группе, выбранной на MemoCreateForm
, а затем применить этого пользователя к этой модели:
class ReceivedMemo(models.Model):
memo = models.ForeignKey(
Memo, related_name='user_memos', on_delete=models.CASCADE)
receiver = models.ForeignKey(
User, related_name='memos', on_delete=models.CASCADE)
read = models.BooleanField(default=False)
Затем я попытался отфильтровать ReceivedMemos
по memo
, чтобы увидеть, есть ли у каждого receiver
памятка read
или нет. Но это становится все сложнее, и я не уверен, будет ли это работать. Я иду об этом правильным путем? Или я должен иметь возможность иметь одну модель, такую как:
class Memo(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date_time = models.DateTimeField(default=timezone.now)
sender = models.ForeignKey(User, on_delete=models.CASCADE)
receiver = models.ForeignKey(User, on_delete=models.CASCADE)
read = models.BooleanField(default=True)
Кажется, что к каждому объекту будет применяться BooleanField
к объекту, а не к пользователю.