当你在Django的数据库查询中使用values()函数或values_list()函数的时候,你往往获取了许多你并不需要的数据。这些数据会增加查询的时间和内存开销,而这时候,only()函数就可以起到很好的作用。
only()函数可以帮助你只选择你所需要的字段,而忽略其他字段。通过这种方式,你可以在减少数据传输的同时也减少不必要的内存空间的开销。
以下是该函数的使用方法及注意事项:
语法
只需要在你的查询语句(QuerySet)中添加only()函数即可。
Model.objects.only('field1', 'field2')
也可以使用通配符*,选择所有字段。
Model.objects.only(*fields)
实例
我们使用一个名为’Person’的Django模型进行以下实例。
class Person(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField(db_index=True)
email = models.EmailField(max_length=254)
phone = models.CharField(max_length=20)
def __str__(self):
return self.name
实例1
假设我们需要查询’Person’模型中所有名字为’Lucy’的年轻人,并且只需要返回名字和年龄两个字段,我们可以这样使用only()函数。
youngsters = Person.objects.filter(name='Lucy', age__lt=30).only('name', 'age')
以上代码中,我们通过filter()函数筛选出名字为’Lucy’且年龄小于30的人,然后使用only()函数将查询结果限定为只有名字和年龄两个字段。
实例2
现在假设我们需要查询所有’name’字段为’Lucy’的人员数据,并将这些人员的电子邮箱地址和电话号码字段加入查询结果中。这次我们并不想返回年龄字段,我们可以如下查询。
lucys_info = Person.objects.filter(name='Lucy').only('email', 'phone')
以上代码中,我们通过filter()函数筛选出’name’字段为’Lucy’的人员数据,然后使用only()函数将查询结果限定为只有电子邮箱地址和电话号码两个字段。
当我们仅仅需要返回一个模型的几个字段时,only()函数是一个非常有用的方法。除了可以提高查询效率、降低网络数据传输负担,还可以提高代码的可读性。