2013-03-05 156 views
5

我試圖讓django admin的字段集中的一個字段僅顯示某些數據,但根據django document,只有list_display的示例顯示爲可以自定義。我嘗試了類似的方法上fieldsets類似如下:django admin:如何在字段集中自定義一個字段?

在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,我不知道如何實現相同的功能。謝謝。

回答

5

將它應用於模型級別的過濾器嗎?如果是這樣,您可以使用模型的ForeignKeyField上的limit_choices_to屬性。

或者,您可以覆蓋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) 

(道歉,如果我誤解了這個問題)

+1

由於' ports_with_same_scanner'不是模型上的實際字段,上面的代碼沒有出錯?如果我試圖在我的'fieldsets'定義中定義一個非模型字段,Django會爲MyModel指定'FieldError:Unknown field(s_field_1,my_field_2)。檢查字段/字段集/排除MyModelAdmin.'類的屬性,並且在它調用formfield_for_foreignkey()方法之前將其刪除。你如何定義'ports_with_same_scanner'以保持Django快樂? – Troy 2015-04-17 19:21:51

1

我不知道,如果在過去真正的問題......我總是用簡單的方法 - 以添加方法的名字到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': ('sutom_name',) 
      }), 
    ) 
    readonly_fields = ('custom_name',) 

必須工作的Django> = 1.7,似乎這種方法可應用於Django的早期版本^但我不測試

+0

也適用於Django V.1.3.7 – Derrick 2017-02-21 15:57:51

相關問題