Django管理系统/内联中的只读字段

11

我使用这个片段在我的管理后端中显示多个字段为只读,但如评论中所指出的那样,它在stackedinline/tabularinline上不起作用。有没有其他方法可以实现这一点?我有一个对象列表附加到一个模型上,只想在模型的详细视图中显示它,而不可能更改值。

3个回答

19
如果您使用的是Django 1.3或更高版本,则有一个名为ModelAdmin.readonly_fields的属性可供使用。 InlineModelAdmin继承自ModelAdmin,因此您应该能够从您的内联子类中使用它。

谢谢您的回答,不幸的是,这是一个生产系统,我不能使用开发版本。 - schneck
FYI:这似乎已经在生产中了(Django 1.3有) - Dolan Antenucci

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 一样,似乎可以通过更改名为“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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接