2017-12-12 7 views
0

私は例えば、モデル内のquerysetsすべてのクエリーセットにフィールドを追加することは可能ですか?ジャンゴ

class ModelA(models.Model): 
    name = models.Charfield(max_length=256) 
    ageMin = models.IntegerField(null=True, blank=True) 
    ageMax = models.IntegerField(null=True, blank=True) 

    def age(self): 
     low = self.ageMin 
     high = self.ageMax 
     if low and high: 
      return str(low) + ' - ' + str(high) 
     if low: 
      return str(low) 
     if high: 
     return str(high) 

は、私が実際にそのようであるage_gapというフィールドなど、すべてのクエリセットにフィールドを追加したいのは、私がModelA のすべてのリターンを得るためのクエリセットを持っているとしましょう持っていますdef ageはモデルそのものなので、各クエリーセットにはgap_gapという特別なフィールドもあります。name, ageMin, ageMax

次のようなものを試しましたが、動作しませんでした。もちろん、これの Q [ 'age_gap'] = q.age()

:上記

all_q = ModelA.objects.filter() 
qs = map(lambda x: x.update({'age_gap': x.age()}), all_q) 

動作しないので、私はall_qでqに対して ような何かをしようと思いました私にもエラーが出る

どうすればいいですか?事前

+0

あり、あなたがそれを参照したいときにちょうどその年齢の機能を使用してに何かを使用することができますか? – kevswanberg

答えて

2

ありがとうございます@propertyまたは@cached_property

class ModelA(models.Model): 
    name = models.Charfield(max_length=256) 
    ageMin = models.IntegerField(null=True, blank=True) 
    ageMax = models.IntegerField(null=True, blank=True) 

    def age(self): 
     low = self.ageMin 
     high = self.ageMax 
     if low and high: 
      return str(low) + ' - ' + str(high) 
     if low: 
      return str(low) 
     if high: 
     return str(high) 

    @property 
    def age_gap(self): 
     return self.age() 
関連する問題