2017-05-18 12 views
1

私はいくつかのmodels.BooleanFieldsを持っていて、それらをDjango Adminビューで反転表示します。 fieldnameパラメータを持つ関数でそれを行う方法はありますか?例えば、admin.pyため を:django models.BooleanFieldの値を逆にする方法は?

list_display = (inverted('booleanField1'), 
       'booleanField2', 
       inverted('booleanField3')) 

はまた、のBooleanFieldのデフォルトであるこれらのアイコンを維持することが重要です。

ありがとうございます。

答えて

2

モデル管理者の値を逆にする方法を作成し、list_displayで使用します。 Trueboolean属性を設定

class MyModelAdmin(admin.ModelAdmin): 
    list_display = ['inverted_field1'] 

    def inverted_field1(self, obj): 
     return not obj.field1 
    inverted_field.boolean = True 
    inverted.short_description = "Not %s" % fieldname 

フィールドは、元のブール型フィールドと同じオン/オフアイコンが表示されますことを意味し、short_description属性を使用すると、列のタイトルを変更することができます。 list_displayは呼び出し可能オブジェクトを受け付けているので、あなたが与えられたフィールド名のために呼び出し可能を返す関数invertedを作成することができるはず

def inverted(fieldname): 
    def callable(obj): 
     return not getattr(obj, fieldname) 
    callable.boolean = True 
    callable.short_description = "Not %s" % fieldname 
    return callable 

class MyModelAdmin(admin.ModelAdmin): 
    list_display = [inverted('field1')] 
+0

それはトリックをしました。ありがとうございました! –

+0

ここでいくつかのレコードを追加しようとするとエラーが発生します:models.py、290行目、__new__ メッセージ=メッセージ%( '、' .join(missing_fields)、 TypeError:シーケンスアイテム0:期待される文字列またはUnicode関数が見つかりました –

+0

問題が何であるかを示す情報は不十分です。コメントにトレースバックを投稿しないでください。これらはあまり読みにくくありません。上記のコードに直接関係しない限り、新しい質問をしてください。上記の 'inverted()'関数をテストしていませんが、そのエラーを引き起こすとは思わないでしょう。 – Alasdair

関連する問題