繁体   English   中英

如何有效使用Django Queryset

[英]How to use Django Queryset efficiently

我在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 Query来获取与该用户相关联的项目,并将其存储在列表中。

尝试这个;

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

并获得所有配置;

configuration = pa.configuration.all()

在这里,您将获得配置的查询集,如果您只需要project_id的列表,则可以尝试一下;

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

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

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)

而且您不需要任何其他工作即可将其存储在列表中,默认情况下过滤返回一个列表。

提示:在诸如ForeignKey之类的关系中,最好使用related_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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM