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

How to make a query to get only the data from each user

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

markerdescription保存在markedtable上。所以,当用户再次打开他的法律时,他的所有标记和描述都会被加载。

问题是在我的查询中,我不知道如何显示已登录用户的描述和标记。我的查询显示的是在标记 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/