我使用这个片段在我的管理后端中显示多个字段为只读,但如评论中所指出的那样,它在stackedinline/tabularinline上不起作用。有没有其他方法可以实现这一点?我有一个对象列表附加到一个模型上,只想在模型的详细视图中显示它,而不可能更改值。
我使用这个片段在我的管理后端中显示多个字段为只读,但如评论中所指出的那样,它在stackedinline/tabularinline上不起作用。有没有其他方法可以实现这一点?我有一个对象列表附加到一个模型上,只想在模型的详细视图中显示它,而不可能更改值。
InlineModelAdmin
继承自ModelAdmin
,因此您应该能够从您的内联子类中使用它。今天我遇到了同样的问题。这是我的解决方案。这是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
就像 JQuery 一样,似乎可以通过更改名为“disabled”的属性来实现此目的(在我的 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