如何在管理员之外使用“只读字段”

2024-04-20 06:44:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个表格,我需要显示我的项目以外的管理领域,有些领域不能编辑,但可以看到他们。你知道吗

要做到这一点,最好在中找到“AdminReadonlyField”django.contrib.admin管理员.helpers“问题是您不能这样做。你知道吗

enter image description here

我试图创建一些小部件来替换这个复杂的类,但是我不能让它与DateTiemField字段一起正常工作。你知道吗

class UserUpdateForm(forms.ModelForm):
    """
    We need field "date_joined" can not be edited but can see them
    """
    class Meta:
        model = User
        fields = ('first_name', 'last_name',
                 'email', 'date_joined', 'slug')

    def __init__(self, user, *args, **kwargs):
        kwargs['instance'] = user
        super(UserUpdateForm, self).__init__(*args, **kwargs)
        self.fields['date_joined'].widget = widgets.CMDateTimeText()

    def clean_date_joined(self):
        instance = getattr(self, 'instance', None)
        if instance and instance.pk:
            return instance.date_joined
        else:
            return self.cleaned_data['date_joined']

我的代码,有点不对劲。你知道吗

class CMDateTimeText(DateTimeBaseInput):
    """
    A SplitDateTime Widget that has some admin-specific styling.
    Hereda Field and Widget.
    """
    format_key = 'DATETIME_FORMAT'
    def __init__(self, attrs=None, format=None):
        # Use slightly better defaults than HTML's 20x2 box
        default_attrs = {'class': 'date_id'}
        if attrs:
            default_attrs.update(attrs)
        super(CMDateTimeText, self).__init__(attrs=default_attrs, format=format)

    def render(self, name, value, attrs=None):
        if value is None:
            value = ''
        value = self._format_value(value)
        final_attrs = self.build_attrs(attrs, name=name)
        return format_html('<p{}>{}</p>', flatatt(final_attrs), conditional_escape(value))

结果图像: enter image description here

你知道怎么做“AdminReadonlyField”“任何视图或窗体吗?你知道吗


Tags: instancenameselfnoneformatdateifinit
1条回答
网友
1楼 · 发布于 2024-04-20 06:44:52

所以在寻找了几个小时的各种解决方案之后,我发现了如何用Django的方法来解决这个问题。你知道吗

只需将属性disabled添加到表单中的字段(而不是小部件!)地址:

# in __init__() with crispy-forms for instance
self.fields['field'].disabled = True 

# as form field
field = forms.CharField(disabled=True) 

而且很有效。。。Django正在考虑不保存该字段,如果有黑客篡改它,尽管它被禁用。仅适用于Django 1.9+。你知道吗

相关问题 更多 >