2014-10-06 118 views
1

是否可以在django admin中顯示非模型字段?Django Admin。顯示非模型字段

例如,我有模型:

class TestModel(models.Model): 
    value = models.DecimalField(max_digits=5, decimal_places=2) 

在Django管理我想顯示自定義字段 「係數1」,「係數2」這不是一個模型字段,因此我不希望將其值保存在數據庫中。這個係數將被用來計算模型的「值」字段。

使用某種算法生成係數。 (例如,我們有模型CoefficientGenerator來保存它的名稱和值)。

這個字段是動態生成的,所以我不能在模型體中聲明它。但用戶必須有 編輯係數的可能性,然後才能使用django admin保存實例。

我試圖重寫方法get_fieldsets中的ModelAdmin:

class TestModelAdmin(ModelAdmin): 
    def get_fieldsets(self, request, obj=None): 
     fieldsets = super(ProductAdmin, self).get_fieldsets(request, obj) 
     for c in CoefficientGenerator.objects.all(): 
      fieldsets[0][1]['fields'].append(c.name) 
     return fieldsets 

而且還覆蓋初始化在我的自定義管理形式:

def __init__(): 
    ... 
    for c in CoefficientGenerator.objects.all(): 
     field = forms.CharField(required=False, widget=forms.Textarea, label=c.name) 
     self.fields[c.name] = field 

但它沒有爲我工作。我得到了錯誤: 未知字段(s)(....)指定爲TestModel

謝謝。

回答

1

我並不完全確定你在這裏想要什麼。但大概是,如果字段值不能在管理中更改,我想你只是想在那裏顯示它的權利?

在這種情況下,你可以在模型中定義的方法,說「name_language()」,然後通過list_display表現出來:

list_display = ('field1', 'field2', 'name_language') 
+0

我已經爲了減少誤解編輯的問題。我無法使用字段聲明,因爲字段是動態生成的。 – 2014-10-06 20:23:58

相關問題