【发布时间】:2019-04-08 13:13:28
【问题描述】:
我有一个具有IntegerField attr 的类。
在它的ModelForm,在这个属性的字段中,我需要发送一个String,稍后在视图中处理它后将存储一个Integer。
问题是 Django 不允许这样做,当我使用 form.cleaned_data.get('myattr') 时,它说这是错误的,因为它应该是一个整数。
class Student(models.Model):
teacher = models.IntegerField(null=False) # I'm saving teacher's key here
class Teacher(models.Model:
name = models.CharField(max_length= 50, null=False)
key = models.IntegerField(null=False)
class StudentForm(forms.ModelForm):
teacher = forms.ModelChoiceField(queryset=Teacher.objects.all(), label='Select the teacher')
因此,当用户选择学生的教师时,该选择字段将显示可用教师的姓名。但在模型中它将存储他们的密钥,我在视图中管理。
views.py:
teacher = form.cleaned_data.get('teacher') # it has the name
teacher = Teacher.objects.get(name=teacher).key # getting the key in order to store an Integer, but Django is banning my code before anyway.
如何在不改变模型数据类型的情况下处理这个问题?
我什至在表单字段中添加了to_field_name 和教师键的值。
【问题讨论】:
-
a
ModelChoiceField用于选择模型中由ForeignKey引用的对象。所以它需要Teacher实例的pk(主键)作为输入。为什么不将ForeignKey用于teacher字段?你现在的代码太复杂了。 -
因为我正在将桌面应用程序迁移到 Web 应用程序,并且我必须保留表格的结构。工作的东西
-
然后确保您的 HTML 表单将
pk作为值发布( -
好吧,如果我检查元素,在
-
您遇到的错误究竟是什么?向我们展示您的模板、错误回溯以及
request.POST的内容。请注意,所有内容始终以字符串形式发布,甚至是整数。当表单字段获取值(并清理它)时,它们会被转换回所需的任何内容
标签: python django forms validation