2016-04-04 6 views
1

から関連するオブジェクトを取得し、私は外部キーフィールドの名前を使用して、関連するオブジェクトのショートカット、 を取得することができます:はモデルオブジェクトからdjango.db.models.fields.related.ForeignKey

>>> m1 = Mailbox.objects.get(pk=38) 
>>> str(m1.localdomainfk) 
'framailx.de' 

しかし、もし

>>> f1 = Mailbox._meta.get_field('localdomainfk') 
>>> f1.value_from_object(m1) 
7 

誰もが私を見ることができ、関連するオブジェクト ショートカットを取得する方法を、私は持っている場合のみ、ローカル:私は、私が唯一の関連オブジェクトのPKを得ることができる代わりに、その名前、 の外部キーフィールドを持っていますオブジェクトと外部キーフィールド?

バックグラウンドは一般的な読み取り専用のDetailViewです。表示されるフィールドの実際のリストは、アクティブなユーザー(スタッフのユーザーはすべて表示されます)によって異なります。

これは、モデルミックスインの一部です:get_fieldsによって返される

def get_fields(self, staff): 
    l = self.readonly_fields_for_staff if staff else self.readonly_fields 
    return [(field.verbose_name, self.get_field_value(field), 
       self.get_related_object_from_field(field)) 
         for field in l] 

def get_field_value(self, field): 
    if field.is_relation: 
     return None 
    else: 
     return self._get_FIELD_display(field) 

def get_related_object_from_field(self, field): 
    if field.is_relation: 
     return getattr(self, field.name, None) 
    else: 
     return None 

リストは、テンプレートで使用されます。

get_related_object_from_fieldには、Muhammad Tahirの回答が含まれています。

+0

シェアモデルを使用することができます。 –

+1

あなたが解決しようとしている実際の問題は何ですか?なぜあなたはこれをやろうとしていますか? – Sayse

+0

これは一般的な読み取り専用DetailViewのためのもので、表示されているフィールドの実際のリストはアクティブユーザー(スタッフのユーザーはすべて表示されます)に依存します: – rabaxabel

答えて

1

はあなたにもgetattr

m1 = Mailbox.objects.get(pk=38) 
f1 = 'localdomainfk' 
f1 = getattr(m1, f1) 
+0

これはまさに私が探し求めた解決策でした。どうもありがとう。 – rabaxabel

関連する問題