2017-03-06 8 views
0

私はDjango管理者の引用モデルを持っています。管理クラスをいくつかのフィールドのリスト表示と共に設定しています。これらのフィールドの1つは「パートナーID」です。私は、私が入っている環境の基本設定ファイルから拡張する複数の異なる設定ファイルを持っています。これらの設定ファイルでは、SHOW_PARTNER_ID変数があります。 SHOW_PARTNER_IDがfalseに設定されている場合は、リスト表示からpartner_idを削除できます。逆の場合も同様です。私は、パートナーIDを持っていない見積もりテーブルの各行に空の文字列を返すメソッドがありますが、単に列を完全に削除するだけです。条件付きでdjango管理リストの表示項目を除外する方法

class QuoteAdmin(admin.ModelAdmin): 
    list_display = ('date', 'device_model', 'first_name', 'last_name', 'customer_address', 'customer_link', 
        'customer_history', 'site_name', 'status', 'partner_id') 

    def partner_id(self, obj): 
      from django.conf import settings 
      try: 
       if settings.SHOW_PARTNER: 
        if obj.partner: 
         return u'<a href="/admin/quote/partner/{}/">{}</a>'.format(obj.partner.id, obj.partner.id) 
        else: 
         return '' 
       else: 
        return '' 
      except Exception as e: 
       logging.error(e) 
       return '' 

答えて

3

モデル管理者のget_list_displayメソッドをオーバーライドします。 (source)「オリジナル」は、単純にクラス属性を返します。

def get_list_display(self, request): 
    """ 
    Return a sequence containing the fields to be displayed on the 
    changelist. 
    """ 
    return self.list_display 

ただ、例えば、ここでの設定に基づいてフィールドを追加/削除などの任意のより複雑なロジックを実装:

def get_list_display(self, request): 
    if not settings.SHOW_PARTNER: 
     return self.list_display[:-1] 
    return self.list_display 
+0

ああ!固溶体、あなたに感謝schwobaseggl:) – JBT

+0

創業父親が意図した;) – schwobaseggl

関連する問題