0

私は3つのクラスを持っています

 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.objects.all().only('name', 'company__name')

クエリセットとして。出来ますか?

4

2 に答える 2

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 に答える
0

ValuesQuerySet と呼ばれる QuerySet のサブクラスを返す値メソッドを使用できます。

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

詳細については、Django Doc

于 2012-10-16T11:18:18.917 に答える