2011-06-10 107 views
3

我想在django管理界面的字段旁邊添加文本。Django Admin:在運行時在字段旁邊添加文本

警告需要在運行時在python方法內創建。我很瞭解python和django ORM,但我不知道如何在該字段旁邊獲取文本。

該文本應該是一個警告。在clean()中引發ValidationError不是解決方案,因爲 用戶不能再編輯頁面。它應該只是一個警告信息。

+0

你想添加列表中顯示的文本在Django管理?例如model.text的值和其他文字? – Efazati 2011-08-24 08:55:30

+0

我想在change_form(在編輯模型實例)頁面中發出警告。 – guettli 2012-01-25 14:36:24

回答

5

您可以爲管理員使用自定義ModelForm子類,在其初始化時爲該字段添加help_text屬性,並對其進行適當的設置。

# forms.py 

class YourModelForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(YourModelForm, self).__init__(*args, **kwargs) 
     self.fields['field_in_question'].help_text = generate_warning() 

# admin.py 

class YourModelAdmin(admin.ModelAdmin): 
    form = forms.YourModelForm 

    # And here you can specify custom CSS/JS which would make 
    # `help_text` for that particular field look like a warning. 
    # Or you can make it generic--say, style (and maybe reposition w/js) all tags 
    # like <span class="warning"> that occur within the help text of any field. 

    class Media: 
     css = {"all": ("admin_warning.css",)} 
     js = ("admin_warning.js",) 
+0

謝謝。我在help_text上設置了帶classnote的div,並獲得我想要的內容。 – guettli 2011-08-31 07:41:46

+0

構造函數中有一個下劃線太多。 – Arahman 2012-03-16 10:23:53

0

我認爲最簡單的方法是覆蓋該模型的特定管理頁面。這在Django文檔中描述爲here。您需要覆蓋的模板可能是change_form.html。在這些模板中顯示的對象可在模板變量original中找到。

我會爲您的模型添加一個方法或屬性,該方法或屬性會生成並返回錯誤消息,並從模板中調用此方法。

編輯:看看contrib/admin/templates/admin/change_form.html有一個包含includes/fieldset.html的顯示管理網站的字段。如果模型具有一些特殊的命名屬性,並且如果顯示,則可以在其中放置一些代碼。你可以簡單地用你的自定義模型覆蓋所有型號的change_form.html

+0

「旁邊的領域」對我來說很重要。使用您建議的解決方案在頁面頂部添加一些消息是相當容易的。但我想在輸入字段旁邊看到警告。用css + js移動它並不是一個解決方案。 – guettli 2011-08-25 13:21:53

+0

我已經更新了答案。 – 2011-08-26 07:39:15

+0

我找不到可在'includes/fieldset.html'中覆蓋的塊。我不想複製整個fieldset.html文件,只是修改一行。我想自己的ModelAdminForm更好。 – guettli 2011-08-29 07:53:51

0

如果您想在更改列表視圖中執行此操作,您可以在模型方法中編寫該方法,該方法返回所需格式的字符串,並將該方法的名稱放入admin的list_display中。

class MyModel(models.Model): 
    myfield = models.CharField(max_length=100) 

    def myfield_with_warning(self): 
     return '%s - %s' % (self.myfield, '<span class="warn">My warning message</p>' 
    myfield_with_warning.short_description = 'My field verbose name' 
    myfield_with_warning.allow_tags = True 

class MyModelAdmin(models.ModelAdmin): 
    list_display = ('myfield_with_warning',) 

如果不是你所需要的,更準確地寫,你想在哪裏顯示警告信息。

相關問題