我想要一个函数,可以有相反的结果模型 __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
在查询中使用。
暂无答案!
目前还没有任何答案,快来回答吧!