У меня есть запрос с использованием 3 таблиц.law
, article
и marked
.У меня есть веб-сайт, где пользователь может выбрать один law
, чтобы прочитать все articles
.Для каждой статьи пользователь может пометить ее или ввести описание этой статьи.
marker
и description
сохраняются в таблице marked
.Поэтому, когда пользователь снова открывает свой закон, все его пометки и описания будут загружены.
Проблема в том, что в моем запросе я не знаю, как отобразить описания и пометки пользователя, вошедшего в систему. Мой запроспоказывает описания и пометки для всех пользователей, зарегистрированных в помеченной таблице.
Пример содержимого помеченной таблицы:
id is_marked description article_id law_id user_id
"0" "0" "test1" "1100" "3" "1"
"1" "0" "test2" "1102" "3" "1"
Если я получаю доступ к law = 3
с user_id =2
, всеописание user_id = 1
показывает.
Мой запрос:
law = get_object_or_404(Law, pk=pk)
articles = Article.objects.filter(law=pk)
articles = (
Article
.objects
.filter(law=pk)
.annotate(
is_marked=Exists(
Marked
.objects
.filter(
article_id=OuterRef('id'),
usuario=request.user,
is_marked=1,
)
)
)
.annotate(
description=(F('markedLaw__description'))
).order_by('id')
Моя модель:
class Law(models.Model):
name = models.CharField('Nome', max_length=100)
description = models.TextField('Description', blank = True, null=True)
class Article(models.Model):
article = models.TextField('Article')
id_article_law = models.IntegerField('Article Law', blank=True, null=True)
law = models.ForeignKey(Law, on_delete=models.CASCADE, verbose_name='Law', related_name='Articles')
class Marked(models.Model):
law = models.ForeignKey(Law, on_delete=models.CASCADE, verbose_name='Law', related_name='markedArtigos')
Article = models.ForeignKey(Article, on_delete=models.CASCADE, verbose_name='Article', related_name='markedLaw')
usuario = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name='markedUsuario', related_name='markedUsuario')
is_marked = models.BooleanField('Está Marcado?', blank=True, default=False)
description = models.TextField('Descrição', blank = True, null=True)