我有一个使用 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)
您可以创建一个模板标签过滤器,它将接收登录的用户和文章并过滤 Marked 模型。
在这种情况下,您将在模板级别处理它,无需进行注释。
这是参考:https : //docs.djangoproject.com/en/2.1/howto/custom-template-tags/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句