python - Django:尝试反转模型的 __str__() 函数
问题描述
我想要一个可以与模型函数相反的__str__
函数。例如我有:
模型
class DepartmentModel(models.Model):
department_name = models.CharField(max_length=100)
department_description = models.CharField(max_length=500)
def __str__(self):
return self.department_name
作为自定义字段的一部分,TypedModelListField
我需要将模型字符串表示形式转换为对象(如果存在)。
说我有<DepartmentModel: Finance>
一个叫做__str__()
返回的对象"Finance"
如果可能,我想采用字符串"Finance"
并具有反转__str__()
函数以返回对象的<DepartmentModel: Finance>
效果。
形式
class AddDepartment(forms.Form):
user = CustomFields.TypedModelListField(
queryset=DepartmentModel.objects.all())
自定义字段
class TypedModelListField(forms.ModelChoiceField):
def to_python(self, value):
if value == '' or value == None:
raise forms.ValidationError('Entry cannot be empty')
#####################################################################
### HERE I WANT TO TRY AND CONVERT __STR__ REPRESENTATION to OBJ ###
#####################################################################
value = super().to_python(value)
return value
class ListTextWidget(forms.TextInput):
def __init__(self, dataset, name, *args, **kwargs):
super().__init__(*args)
self._name = name
self._list = dataset
self.attrs.update({'list':'list__%s' % self._name,'style': 'width:100px;'})
if 'width' in kwargs:
width = kwargs['width']
self.attrs.update({'style': 'width:{}px;'.format(width)})
if 'identifier' in kwargs:
self.attrs.update({'id':kwargs['identifier']})
def render(self, name, value, attrs=None, renderer=None):
text_html = super().render(name, value, attrs=attrs)
data_list = '<datalist id="list__%s">' % self._name
for item in self._list:
data_list += '<option value="%s">' % item
data_list += '</datalist>'
return (text_html + data_list)
我必须补充一点,我希望它是动态的,因此无论模型如何,都可以重新应用自定义字段。例如我可以写(在to_python
函数中):
try:
value = DepartmentModel.objects.get(department_name=value)
except:
raise forms.ValidationError('Department does not exist')
但这对于模型和department_name
查询中使用的模型是明确的。
解决方案
推荐阅读
- c# - MultiBinding 和 IMultiValueConverter。无法正常工作
- javascript - 没有调用 Mongoose 验证器?
- php - Linkedin v2 me API 不返回位置值
- javascript - 在 Redux 中处理异步操作,无需任何中间件
- docker - 如何在不使用 --scale 的情况下使用 docker-compose 指定容器数量?
- java - 这段代码似乎编译不干净
- dart - 在全局变量中使用值时,由于 EdgeInsets.all 导致 Flutter dart 编译失败
- proxy - Outlook 通过 .PAC 文件
- reactjs - React Spring 中的动画持续时间
- reactjs - React on state change 中的动画按钮