1

私はこのことに苦労しています:

私はすべての多くのオブジェクトを取得する必要があり、 prefetch_related を使用することを考えていました

これは私のモデルのサンプルです:

class Company(models.Model):
    companyjobs = models.ManyToManyField(CompanyJob, related_name='jobs')

class CompanyJob(models.Model):
    source = models.CharField(_('Source'), max_length=64, db_index=True)

これは私が試したものです:

        search_results = Company.objects.prefetch_related('companyjobs')

次に、companyjobs オブジェクトにアクセスしたいと思います。どうすればいいのですか?

4

1 に答える 1

-1

を必要とせずに、Company モデル クラスの任意のインスタンスから直接 companyjobs にアクセスできますprefetch_related

例えば。

# .all() will get all elements and [0] will get the first
company = Company.objects.all()[0]  

company.companyjobs
# this is actually a ManyToMany Manager
# you deal with it like any other manager so

for companyjob in company.companyjobs.all():
    # all() will again get all items in company.companyjobs
    # here you iterate over all companyjobs in that company
    ... # do what you must

現在、私たちは1つの会社しか持っておらず、そこからすべての会社の仕事をしています。

django がデータベースに対して 2 つのクエリを作成する方法です。

1つは会社用、もう1つは仕事用

prefetch_relatedこれらのクエリを 1 つに「マージ」して、関連するすべてのジョブを取得しながら、データベースから企業を取得します

prefetch_relatedを使用しない場合、対処しなければならない会社が増えるほど、その会社の仕事を取得するために 1 つの余分なクエリを作成し、パフォーマンスが劇的に低下するため、非常に便利です。

詳細はこちら: https://docs.djangoproject.com/en/1.7/ref/models/querysets/#prefetch-related

于 2015-02-05T16:33:47.507 に答える