Django 按登录用户的注释过滤器

Django 按登录用户的注释过滤器,django,python-3.x,django-views,many-to-many,Django,Python 3.x,Django Views,Many To Many,下午好 我有三个模型相互链接,Perfil,Puesto和Tags。Perfil模型继承自Abstractuser。在该模型中添加了一个附加信息“puesto de trabajo(工作)”,该信息在如下所示的模型中创建 models.py from django.db import models from django.contrib.auth.models import AbstractUser from apps.Tags.models import Tags class Puesto(

下午好

我有三个模型相互链接,Perfil,Puesto和Tags。Perfil模型继承自Abstractuser。在该模型中添加了一个附加信息“puesto de trabajo(工作)”,该信息在如下所示的模型中创建

models.py

from django.db import models
from django.contrib.auth.models import AbstractUser
from apps.Tags.models import Tags

class Puesto(models.Model):
    nombre_puesto = models.CharField(max_length=50)
    etiquetas = models.ManyToManyField(Tags, blank = True)

    def __str__(self):
        return '{}'.format(self.nombre_puesto)

class Perfil(AbstractUser):

    nom_puesto = models.ForeignKey(Puesto, blank = True)

    def __str__(self):
        return '{}'.format(self.username)
标记模型是在另一个应用程序中创建的,请参见:

models.py

class Tags(models.Model):
    nombre = models.CharField(max_length=20)

    def __str__(self):
        return '{}'.format(self.nombre)
此外,我还创建了另一个应用程序来创建注释,它可以选择添加标记

目标是显示标记与用户配置文件标记匹配的注释。为了达到这一目标:

views.py

class ComentarioListar (LoginRequiredMixin,ListView):
    login_url='/'
    redirect_field_name='redirigido'
    model = Comentario
    template_name = 'home/comentario_listar.html'

    def get_queryset(self):
        aa=Puesto.objects.filter(nombre_puesto=self.request.user.nom_puesto)

        return Comentario.objects.exclude(autor__id=self.request.user.id)
        b=Perfil.objects.filter(nom_puesto=self.request.user)
        c=Puesto.objects.filter(nombre_puesto=b)
        return Comentario.objects.filter(tag__id=c)
这不管用,太疯狂了!有人知道如何只显示符合用户标签的注释吗


谢谢你的回答

可以在
Perfil.nom_puesto.etiquetas.all()
找到给定用户的标签

要仅查找与给定用户具有相同标记的
Comentario
对象,假设
Comentario
与名为
标记的
标记有多对多关系:

>> user_tags = request.user.nom_puesto.etiquetas.all()
>> matching_comments = Comentario.objects.filter(tags__in = user_tags).distinct()

将对象列表传递给
中的
\u将其转换为引擎盖下的主键;Django然后为每个匹配创建一个带有
Comentario
对象的查询集。如果用户和注释有多个共同的标记,那么您将看到重复的结果,因此使用
distinct()

可以在
Perfil.nom_puesto.etiquetas.all()
找到给定用户的标签

要仅查找与给定用户具有相同标记的
Comentario
对象,假设
Comentario
与名为
标记的
标记有多对多关系:

>> user_tags = request.user.nom_puesto.etiquetas.all()
>> matching_comments = Comentario.objects.filter(tags__in = user_tags).distinct()

将对象列表传递给
中的
\u将其转换为引擎盖下的主键;Django然后为每个匹配创建一个带有
Comentario
对象的查询集。如果用户和注释有多个共同的标记,那么您将看到重复的结果,因此使用
distinct()

对不起,我找不到答案。如果你能帮助我,我将不胜感激。谢谢,对不起,我找不到答案。如果你能帮助我,我将不胜感激。非常感谢。