如何进行查询以仅获取每个用户的数据

时间:2018-12-21 19:18:14

标签: django django-orm

我有一个使用3个表的查询。 lawarticlemarked。 我有一个网站,用户可以在其中选择一个law来阅读所有articles。对于每篇文章,用户都可以对其进行标记或输入对此文章的一些描述。

markerdescription保存在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)

1 个答案:

答案 0 :(得分:1)

您可以创建模板标签过滤器,该过滤器将接收登录的用户和文章并过滤标记的模型。

在这种情况下,您将在模板级别处理它,而无需做注释。

这里是参考:https://docs.djangoproject.com/en/2.1/howto/custom-template-tags/