成功解决:ModelForm.save() 返回的instance对象,无法通过get_xx_display获取choice的中文

问题描述

  • 首先,models.py中主要i源代码如下:
class FileModelForm {
	user = models.CharField(verbose_name="用户名", max_length=32)
	file_type_choices = (
	        (1, '文件'),
	        (2, '文件夹')
	    )
    file_type = models.SmallIntegerField(verbose_name='类型', choices=file_type_choices)
   }
  • 然后,对数据进行 save, 代码如下
form = FileModelForm(data=request.POST)
form.instance.user = 'ruochen'
form.instance.file_type = 1
instance = form.save()
  • 保存后,理论上我们可以通过 instance.user 获取用户名,通过 instance.get_file_type_display() 获取choice 的中文,即 “文件”。但是实际上 save() 之后通过 instance.get_file_type_display() 获取到的一直是 “1”, 获取不到其中文名称。

解决方法

  • 我们可以通过字典解决,代码如下:
form = FileModelForm(data=request.POST)
data_dict = form.cleaned_data
data_dict.update({'user': 'ruochen', 'file_type': 1})
instance = models.FileRepository.objects.create(**data_dict)
  • 这样,在保存之后,就可以通过 instance.get_file_type_display() 来获取中文名了

猜你喜欢

转载自blog.csdn.net/qq_29339467/article/details/107578187