如何有效地使用Django Queryset

时间:2015-12-11 12:53:01

标签: python django django-models

我在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)

我从网址获得了用户名,我想编写一个Django Query来获取项目与该用户关联,并存储在列表中。

3 个答案:

答案 0 :(得分:1)

试试这个;

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

并获得所有配置;

configuration = pa.configuration.all()

在这里,您将获得配置的查询集,如果您只想要project_id列表,那么您可以试试这个;

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

答案 1 :(得分:1)

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

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})

答案 2 :(得分:0)

简单地说:

ProjectAssociated.objects.filter(user_name__username=username)

并且您不需要任何额外的工作来将其存储在列表中,默认情况下过滤返回List。

蒂普: 在诸如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