如何进行查询以仅获取每个用户的数据
How to make a query to get only the data from each user
我有一个使用 3 tables 的查询。 law
、article
和 marked
。
我有一个网站,用户可以在其中选择一个 law
来阅读所有 articles
。对于每篇文章,用户都可以对其进行标记或为该文章键入一些描述。
将marker
和description
保存在marked
table上。所以,当用户再次打开他的法律时,他的所有标记和描述都会被加载。
问题是在我的查询中,我不知道如何显示已登录用户的描述和标记。我的查询显示的是在标记 table 中注册的所有用户的描述和标记。
标记table内容的例子:
id is_marked description article_id law_id user_id
"0" "0" "test1" "1100" "3" "1"
"1" "0" "test2" "1102" "3" "1"
如果我使用 user_id =2
访问 law = 3
,则会显示 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)
您可以创建一个模板标签过滤器,它将接收登录的用户和文章并过滤标记模型。
在这种情况下,您将在模板级别处理它,无需进行注释。
引用如下:https://docs.djangoproject.com/en/2.1/howto/custom-template-tags/
我有一个使用 3 tables 的查询。 law
、article
和 marked
。
我有一个网站,用户可以在其中选择一个 law
来阅读所有 articles
。对于每篇文章,用户都可以对其进行标记或为该文章键入一些描述。
将marker
和description
保存在marked
table上。所以,当用户再次打开他的法律时,他的所有标记和描述都会被加载。
问题是在我的查询中,我不知道如何显示已登录用户的描述和标记。我的查询显示的是在标记 table 中注册的所有用户的描述和标记。
标记table内容的例子:
id is_marked description article_id law_id user_id
"0" "0" "test1" "1100" "3" "1"
"1" "0" "test2" "1102" "3" "1"
如果我使用 user_id =2
访问 law = 3
,则会显示 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)
您可以创建一个模板标签过滤器,它将接收登录的用户和文章并过滤标记模型。
在这种情况下,您将在模板级别处理它,无需进行注释。
引用如下:https://docs.djangoproject.com/en/2.1/howto/custom-template-tags/