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