django admin / inline中的只读字段

时间:2010-01-29 09:09:17

标签: django django-admin

我使用this snippet在我的管理后端中显示几个字段为readonly,但正如评论中所注意到的,它在stackinline / tabularinline上不起作用。有没有其他方法来实现这一目标?我有一个附加到模型的对象列表,只是想在模型的详细信息视图中显示它,而无法更改值。

3 个答案:

答案 0 :(得分:18)

如果您正在运行Django 1.3或更高版本;你可以使用一个名为ModelAdmin.readonly_fields的属性。

InlineModelAdmin继承自ModelAdmin,因此您应该可以从内联子类中使用它。

答案 1 :(得分: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

答案 2 :(得分:0)

与JQuery的情况一样,似乎你可以通过更改名为“禁用”的attr来实现这一点(在我的Safari中工作,好吧我们现在在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