Django结合了选择

时间:2017-04-29 17:43:17

标签: python-3.x django-models django-queryset

我有以下型号:

class Person(models.Model):
    name = models.TextField() 

class User(models.Model):
    person = models.ForeignKey(Person)
    user_name = models.TextField() 


def match_person(user_list):
    results = []
    for user in user_list:
       user_match = user_name.objects.select_related('person').
                    filter(alias=user).all()
       ....
       results.append(user_match)
return results

一个人可以拥有一个或多个用户名以及他们自己的名字。 我的匹配方法基本上遍历给定用户名列表,并将用户和相关人员存储在结果中。

由于我的方法只包含SELECT查询,我想知道我是否可以将我的选择合并到一个查询中以获得更好的性能?

1 个答案:

答案 0 :(得分:0)

values_list将返回包含所需值的元组列表:

user_list = ['username1', 'username2', 'username3']
User.objects.filter(user_name__in=user_list).values_list('user_name','person__name')

将返回

[('username1', 'person1'), ('username2', 'person1') ...]

PS。对于诸如名称之类的短字符串,CharField优于TextField