如何有效使用Django Queryset

2024-10-03 02:46:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Django中有三个模型,一个是默认的Django用户模型。你知道吗

class ConfigurationDB(models.Model):
    project_id = models.CharField(max_length=250)

    def __unicode__(self):
        return str(self.project_id)


class ProjectAssociated(models.Model):
    user_name = models.ForeignKey(User, verbose_name="User Name")
    configuration = models.ManyToManyField(ConfigurationDB, verbose_name= "Project Associated")

    def __unicode__(self):
        return str(self.user_name)

我从url中得到了用户名,我想编写一个Django查询来获取与该用户关联的项目,并将其存储在一个列表中。你知道吗


Tags: django用户name模型selfprojectidmodel
3条回答

试试这个

pa = ProjectAssociated.objects.filter(user_name__username=username)

获得所有配置

configuration = pa.configuration.all()

在这里,您将得到配置的查询集,如果您只需要项目id的列表,那么您可以试试这个

configuration = pa.configuration.all().values_list('project_id', flat=True)

首先,您应该获取一个user对象,以确保传递的用户名确实存在。然后,直接通过用户对象进行查询。你知道吗

from django.shortcuts import get_object_or_404, render

def your_view(request, username=None):
   user = get_object_or_404(User, username=username)
   pa = ProjectAssociated.objects.filter(user_name=user)

   return render(request, 'template.html', {'projects': pa})

简单地做:

ProjectAssociated.objects.filter(user_name__username=username)

并且您不需要任何额外的工作就可以将它存储在列表中,默认情况下,filter返回一个列表。你知道吗

提示: 在ForeignKey等关系中,最好使用相关的\u name属性,如下所示:

user_name = models.ForeignKey(User,verbose_name="User Name", related_name="associated_projects")

如果您有用户实例,则此功能非常有用您可以直接访问反向关系:

user1 = User.objects.get(username=username_value) # here all the user data
associated_project_list = user1.associated_projects.all() # here the list of his projects

要访问项目id,只需执行以下操作:

for project in associated_project_list:
    print project.id

相关问题 更多 >