django admin/inline 中的只读字段

发布于 2024-08-20 05:57:06 字数 203 浏览 2 评论 0原文

我使用 此片段 将我的管理后端中的几个字段显示为只读,但如注释,它不适用于 stackedinline/tabularinline。还有其他方法可以实现这一目标吗?我有一个附加到模型的对象列表,只想在模型的详细信息视图中显示它,而无法更改值。

I use this snippet to show several fields in my admin backend as readonly, but as noticed in the comments, it does not work on stackedinline/tabularinline. Is there any other way to achieve this? I have a list of objects attached to a model and just want to show it in the model's details view without the possibility to change values.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

清风不识月 2024-08-27 05:57:06

如果您运行的是 Django 1.3 或更高版本;有一个名为 ModelAdmin.readonly_fields< 的属性/a> 你可以使用它。

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

If you are running Django 1.3 or later; there's an attribute named ModelAdmin.readonly_fields which you could use.

InlineModelAdmin inherits from ModelAdmin, so you should be able to use it from your inline subclass.

暮凉 2024-08-27 05:57:06

我今天遇到了同样的问题。这是我的解决方案。这是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

I've encountered the same problem today. Here is my solution. This is example of read-only field for the ForeignKey value:

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
决绝 2024-08-27 05:57:06

与 JQuery 的情况一样,似乎您可以通过更改名为“disabled”的 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

As is the case with JQuery, it seems you can achieve this by changing an attr called "disabled" (works in my Safari, OK we're now in 2013 :-) ).
Example below:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文