django:尝试反转model的\uu str \uu()函数

xdnvmnnf  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(143)

我想要一个函数,可以有相反的结果模型 __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 在查询中使用。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题