2011-01-13 95 views
3

我試圖在管理員中使用ModelAdmin類公開一個Django模型。 ModelAdmin似乎假定您使用相同的表單進行添加和更改。我希望add_view使用只列出少數必填字段的簡化形式。提交後,它將重定向到change_view並使用ModelForm的默認窗體渲染幾乎所有的字段。定義一個用於Django的ModelAdmin的自定義表單添加視圖

這樣做最簡單的方法是什麼?我檢查了代碼,但我沒有看到明確的方法。 ModelAdmin傾向於在add_view和change_view中引用單個self.form引用。我想重寫add_view(),但我不想重新實現所有的代碼。覆蓋get_form()可能會更高效,但我看不到如何檢測add_view或change_view期間是否調用get_form()。

回答

7

get_form()change_view期間被調用時通過obj參數。根據需要簡單檢測返回新的表單/調整參數。

例如:


class MyModelAdmin(admin.ModelAdmin): 
    def get_form(self, request, obj=None, **kwargs): 
     # hide every other field apart from url 
     # if we are adding 
     if obj is None: 
      kwargs['fields'] = ['url'] 
     return super(MyModelAdmin, self).get_form(request, obj, **kwargs) 

將強制形式,只添加時顯示「網址」領域,一切並非如此。

+0

這通常是正確的想法,但事實證明我需要覆蓋更多比這。 django/contrib/auth/admin.py中的UserAdmin類就是一個很好的例子。 – Cerin 2011-01-13 20:31:08