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