【发布时间】:2015-05-04 10:13:03
【问题描述】:
我正在使用Django MultiSelectField 来存储项目的类别。
我的要求如下:一个项目可以有一个或多个类别。最初创建项目时,用户应该能够选择选择字段中列出的任何类别。如果用户选择“不适用”,则其他类别将被禁用。
在编辑项目时,用户不能取消选择最初选择的类别,但他可以添加/选择除原始类别之外的其他类别。最初选择的类别在编辑时应该是只读的。
我的模型如下所示:
from multiselectfield import MultiSelectField
(...)
class Project(models.Model):
CAT_0 = 0
CAT_1 = 1
CAT_2 = 2
CAT_3 = 3
PROJECT_CATEGORIES = (
(CAT_0, _('Not Applicable')),
(CAT_1, _('My Category 1')),
(CAT_2, _('My Category 2')),
(CAT_3, _('My Category 3')),
)
(...)
project_categories = MultiSelectField(choices=PROJECT_CATEGORIES, max_choices=3, default=CAT_0)
还有我的forms.py
class ProjectForm(ModelForm):
class Meta:
model = Project
(...)
def __init__(self, *args, **kwargs):
super(ProjectForm, self).__init__(*args, **kwargs)
(...)
if self.instance.pk:
for choice in self.fields['project_categories'].choices:
if str(choice[0]) in self.instance.project_categories:
#TODO: Make this choice to be readonly i.e. user should not be able to uncheck it
else:
#TODO: Leave the choice as it is i.e. user can select/check it
# This is what I had earlier, but it makes all the choices to be readonly. Not what I want
self.fields['strategic_objectives'].widget.attrs['readonly'] = True
self.fields['strategic_objectives'].widget.attrs['disabled'] = True
如何确保原始类别显示为只读? 这是解决方法还是 JS 会是更好的选择?
【问题讨论】: