class MyModel(models.Model) :
people = models.ManyToManyField(User,related_name='people')
...
class MyForm(ModelForm) :
class Meta :
model = MyModel
widgets = {'people':TextInput(),}
def clean_people(self) :
# turn a comma-separated list of names into a Python list
return [name0,name1,...]
def clean(self) :
# if no other errors, turn list of names into list of Users
这不起作用,因为在调用 field.clean 之前不会调用 clean_people,其中 field 是 ModelMultipleChoiceField 的一个实例,它检查 Python 列表或元组,因此会引发 ValidationError 并跳过 clean_people。调用顺序是这样的原因是否有原因,是否有一些标准规定可以避免这个问题?我可以在 MyForm 的每个实例中将 field.clean 设置为 lambda x:x,但这看起来真的很难看。将 MyForm 中的 people 字段明确定义为 CharField 可能是正确的做法吗?