0

我有三个班

 Class Company(models.Model):
     name     = CharField( max_length = 26 , blank = True)
     #(...)

 class Person(models.Model):
     name     = CharField( max_length = 26 , blank = True)
     function = CharField( max_length = 50 , blank = True)
     company  = ForeignKey ( Company , related_name = 'persons' )
     # All the company table inside the data base is loaded in order to make the query,
     # This make a HUGE amount of data and takes too many time...
     # (...)
     def __unicode__(self):
          # caption uses both name and company__name fields but no other fields
          return self.name + '(' + self.company.name + ')'

 class Contact(models.Model):
      person  =  ForeignKey ( Person )

为了优化性能,我想使用最新的 person 字段

Person.objects.all().only('name', 'company__name')

作为查询集。是否可以?

4

2 回答 2

0

您可以使用 values 方法,该方法返回一个名为 ValuesQuerySet 的 QuerySet 子类。

Person.objects.all().values('name', 'company__name')

有关更多信息Django 文档

于 2012-10-16T11:18:18.917 回答
0

使用代理模型:

 class Person_short_manager(Manager):
    def get_query_set(self):
        return super(self, Person_short_manager).get_query_set().only('name','company__name')

 class Person_short(Person):
    objects = Person_short_manager(Manager)
    class Meta:
         proxy = True

然后替换

 person  =  ForeignKey ( Person )

经过

 person  =  ForeignKey ( Person_short )
于 2012-10-23T17:36:49.353 回答