[英]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.