2015-02-24 61 views
2

我目前的模式在我的Django應用程序:問題與預取在Django

class Referentiel(models.Model): 
    code = models.CharField(max_length=50) 
    libelle = models.CharField(max_length=100) 


class Reference(models.Model): 
    referentiel = models.ForeignKey('Referentiel', related_name='reference_set') 
    clef = models.CharField(max_length=50) 


class ValeurReference(models.Model): 
    reference = models.ForeignKey('Reference', related_name='valeur_set') 
    valeur = models.DecimalField(max_digits=15, decimal_places=5) 
    date_fin = models.DateField(blank=True, null=True) 

我想檢索Referentiel的價值,所以我做這樣的事情:

Referentiel.objects.filter(code='whatever_code').prefetch_related(Prefetch('reference_set__valeur_set', to_attr='valeurs')) 

但試圖讓我的價值觀時,我有以下錯誤:

AttributeError: 'Referentiel' object has no attribute 'valeurs' 

Django的版本:1.7.4 的Python版本sion:3.4.2

感謝您的任何建議。

+0

我測試一些代碼,它似乎是「valeurs」已設置的reference_set內,而不是Referentiel查詢集內。如果你需要所有的ValeurReference,你可以使用de values()方法。 – RMotitsuki 2015-02-24 19:32:47

+0

你的意思是「valeurs」在每個「參考」模型實例內到我的查詢集的'reference_set'? – 2015-02-25 22:03:08

+0

就是這樣。如果** referentiels **是你的queryset的變種,你可以打印出「valeurs」: 'in a referentiels: for b in a.reference_set.all(): print b.valeurs' – RMotitsuki 2015-02-26 14:06:52

回答

0

我想你已經使用queryset參數來指定prefetch的自定義查詢,並從那裏預取valeur_set。

更新:

reference_qs = Reference.objects.prefetch('valeurreference_set').all() 

    Referentiel.objects.filter(code='whatever_code')\ 
     .prefetch_related(
      Prefetch('reference_set', queryset=reference_qs, to_attr='valeurs') 
     ) 
+0

我看到了什麼你的意思是,但如何在我的例子中做到這一點? – 2015-02-25 22:01:57

+0

給予以上嘗試更新 – 2015-02-27 14:04:10

+0

這是行不通的。在這種情況下,'valuers'屬性將返回Reference對象,而不是ValuerReference。雖然我找不到解決方案 – dimyG 2016-12-19 08:37:36