2010-01-29 125 views
10

我使用this snippet在我的管理後臺顯示多個字段爲只讀,但正如在註釋中注意到的,它在stackedinline/tabularinline上不起作用。有沒有其他方法可以實現這一點?我有連接到一個模型對象的列表,只是想表明它的模型詳細信息視圖,而不更改值的可能性。django admin中的只讀字段admin/inline

回答

17

如果你正在運行的Django 1.3或更高版本;有一個名爲ModelAdmin.readonly_fields的屬性,你可以使用。

InlineModelAdmin繼承自ModelAdmin,所以你應該能夠從你的內聯子類中使用它。

+0

感謝您的回答,不幸的是,這是一個高效的系統,我無法使用開發版。 – schneck 2010-01-29 13:11:39

+0

供參考:這似乎是在生產(Django 1.3有) – 2011-09-28 20:01:24

+0

感謝您的注意。我已經相應地更新了答案。 :) – drmegahertz 2011-09-29 09:03:14

2

我今天遇到同樣的問題。這是我的解決方案。這是例如只讀場爲ForeignKey的值:

class MySelect(forms.Select): 
    def render(self, name, value, attrs=None, choices=()): 
     s = Site.objects.get(id=value) 
     return s.name 

class UserProfileInlineForm(forms.ModelForm): 
    site = forms.ModelChoiceField(queryset=Site.objects.all(), widget=MySelect) 

class UserProfileInline(admin.StackedInline): 
    model = UserProfile 
    form = UserProfileInlineForm 
0

由於是使用jQuery的情況下,似乎可以通過更改名爲「禁用」(在我的Safari瀏覽器的作品生成的attr實現這一目標,確定我們」現在在2013年:-))。 以下示例:

def get_form(self, request, obj=None, **kwargs): 
     result = super(<your ModelAdmin class here>, self).get_form(request, obj=obj, **kwargs) 
     result.base_fields[<the select field you want to disable>].widget.attrs['disabled'] = 'disabled' 
     return result