Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django admin中禁用选项列表,仅用于编辑_Python_Django_Django Forms_Django 1.8 - Fatal编程技术网

Python 在Django admin中禁用选项列表,仅用于编辑

Python 在Django admin中禁用选项列表,仅用于编辑,python,django,django-forms,django-1.8,Python,Django,Django Forms,Django 1.8,我想在编辑对象时禁用某些字段。我已经设法为文本字段这样做了,但对于下拉列表(选择列表)来说是不可能的 我在表单的构造函数中执行此操作 class OrderModelForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(forms.ModelForm, self).__init__(*args, **kwargs) instance = getattr(self, 'instan

我想在编辑对象时禁用某些字段。我已经设法为文本字段这样做了,但对于下拉列表(选择列表)来说是不可能的

我在表单的构造函数中执行此操作

class OrderModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(forms.ModelForm, self).__init__(*args, **kwargs)
        instance = getattr(self, 'instance', None)
        if instance and instance.pk:
            self.fields['description'].widget.attrs['readonly'] = True
            self.fields['city_code'].widget.attrs['disabled'] = True

请注意,我是如何使用不同的关键字为这两个字段设置的,但我不能为我的
客户id
字段设置该属性。

将属性设置为
禁用的
只读的
只会影响小部件的显示方式。它实际上并不会阻止某人提交更改这些字段的post请求

这可能是一种更好的覆盖模型的方法

class OrderModelAdmin(admin.Model
    def get_readonly_fields(self, request, obj=None):
        if self.obj.pk:
            return ['description', 'city_code', 'customer']
        else:
            return []

将属性设置为
disabled
readonly
只会影响小部件的显示方式。它实际上并不会阻止某人提交更改这些字段的post请求

这可能是一种更好的覆盖模型的方法

class OrderModelAdmin(admin.Model
    def get_readonly_fields(self, request, obj=None):
        if self.obj.pk:
            return ['description', 'city_code', 'customer']
        else:
            return []

@Alasdair的答案比这个好(因为这个不会阻止提交)。但我发布了它,以防万一有人想要
modelcooicefield
的“只读”功能

self.fields['customer_id'].widget.widget.attrs['disabled'] = 'disabled'
请注意,对于
选项,字段
的内容如下:

self.fields['city_code'].widget.attrs['disabled'] = True

@Alasdair的答案比这个好(因为这个不会阻止提交)。但我发布了它,以防万一有人想要
modelcooicefield
的“只读”功能

self.fields['customer_id'].widget.widget.attrs['disabled'] = 'disabled'
请注意,对于
选项,字段
的内容如下:

self.fields['city_code'].widget.attrs['disabled'] = True

哇!很好的解决方案。谢谢快问,你知道为什么我要在表单中复制我的只读字段吗?我不确定是什么导致字段被复制。哇!很好的解决方案。谢谢快问,你知道为什么我要在表单中复制我的只读字段吗?我不确定是什么导致字段被复制。