8

django adminのフィールドセットに1つのフィールドを作成して特定のデータのみを表示しようとしていますが、djangoのドキュメントlist_displayによると、カスタマイズできるのは例だけです。私は次のように同様のアプローチを試しましたfieldsets

models.pyの場合:

def ports_with_same_scanner(self):
    return PortList.objects.filter(scanner=self.scanner)
ports_with_same_scanner.short_description = 'port_lists'

admin.pyでは、これは機能しません:

fieldsets = (
            ('Scan Template', { 
            'fields': ( ('name', 'scanner', 'ports_with_same_scanner',), 'comment', ('in_use',
                'fc_growing', 'nc_growing'), 'nvt_prefs')
            }),
)

ただし、これを行うと:

list_display = ('name', 'scanner', 'ports_with_same_scanner', 'comment', 'in_use', 'fc_growing', 'nc_growing', 'nvt_prefs')

ports_with_same_scannerうまくいきます。fieldsets問題は、表示をからに変更したくないということですlist_display。どうすれば同じ機能を実現できるのでしょうか。ありがとう。

4

2 に答える 2

6

過去に本当の問題があるかどうかはわかりません...私は常に単純なアプローチを使用しています-メソッドの名前をに追加するためにreadonly_fields = ()

例:

models.py

class My(models.Model):

    def custom_name(self):
        return 'test'
    custom_name.allow_tags = False
    custom_name.short_description = 'custom_name'

admin.py

class MyAdmin(admin.ModelAdmin):
    fieldsets = (
            (None, {
                    'fields': ('custom_name', )
            }),
    )
    readonly_fields = ('custom_name', )

動作している必要がありますDjango>=1.7このアプローチは、初期バージョンのDjango ^に適用できるようですが、テストはしていません

于 2016-04-20T07:46:41.073 に答える
5

モデルレベルでフィルターを適用することは機能しますか?その場合は、モデルののlimit_choices_to属性を使用できますForeignKeyField

または、modelAdminクラスのformfield_for_foreignkey属性をオーバーライドすることもできます。

何かのようなもの -

class YourModelAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "ports_with_same_scanner":
            kwargs["queryset"] = PortList.objects.filter(scanner=self.scanner)
        return super(YourModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

(質問を誤解した場合はお詫びします)

于 2013-03-05T17:30:11.713 に答える