2016-04-28 7 views
0

FKに移行するフィールドを持つ一連のモデルがあります。Djangoモデルの外部キーフィールドのクエリ可能なエイリアスを作成するにはどうすればよいですか?

class Sizing(models.Model): 
    btu_hour = models.IntegerField() 
    configuration = models.ForeignKey(Configuration) 
    ### WHAT I'D LIKE; alias only ### 
    flange = Alias(to='configuration__flange') 

class Configuration(models.Model) 
    flange = models.ForeignKey('parts.Router') 

class Sizing(models.Model: 
    btu_hour = models.IntegerField() 
    flange = models.ForeignKey('parts.Router') 

は、私がflangeフィールド上で検索を行う私のビューでクエリを持っていると仮定すると、どのように私は、エイリアスを作成することができますか?私は上記の方法で再構成されている多くのモデルを持っており、このメソッドを使用して、ビューなどでそのフィールドのすべての使用を置き換える必要がないようにしたいとします。

任意のポインタがあります。私が見つけたモデルのエイリアスに関するすべての情報は、同じモデルのフィールドにしか作用しません。あなたはそれがすべてでは影響を受けませんsizing_obj.flangeを持っている場合、ビューのいずれかで、その後

class Sizing(models.Model): 
    btu_hour = models.IntegerField() 
    configuration = models.ForeignKey(Configuration) 

    # define the property flange 
    @property 
    def flange(self): 
     return self.configuration.flange 

答えて

1

最も簡単な解決策は@propertyを作成することです。

ただし、クエリセットやフィルターなど

+0

おかげで、しかし、同様のフィルタリング/クエリセットで使用可能になるものを求めている中で、それを使用することはできません。数十のモデルでリファクタリングを避けることを望んでいたが、それが唯一の方法かもしれないと思っていた。 –

+0

クエリーセットでのフィルタリングで使用できるエントリは、モデル自体のフィールドとして定義されているものだけです。この場合、 'Flange'オブジェクトと直接の関係がないので、私はあなたがそれをフィルタリングすることができるとは確信していません。唯一の方法は中間モデルを経由することです、例えばここでは 'configuration__change'を実行します。私は他の何かを見つけることができないようです。 – AKS

関連する問題