django是否有某种方法可以在验证ModelForm之前从中获取值?
假设这些为django模型:django是否有某种方法可以在验证ModelForm之前从中获取值?,django,django-forms,Django,Django Forms,假设这些为django模型: class Author(): name = charfield() class Book(): title = charfield() author = foreignkey() 和一个模型形式: class BookForm(): # i override the author field author = models.CharField() class Meta: model = B
class Author():
name = charfield()
class Book():
title = charfield()
author = foreignkey()
和一个模型形式
:
class BookForm():
# i override the author field
author = models.CharField()
class Meta:
model = Book
fields = ('title', 'author')
我正在使用一个自动完成插件(比如facebook搜索,所以我可以在不使用choicefield的情况下填充作者字段)。问题是,我无法从author
字段赋值,因为它不是author的实例,而是一个字符串。所以我想在它被验证之前对它进行操作。我试图修改QueryDict
,但它是不可变的。只要我用form=BookForm(request.POST)
调用表单,它就会得到错误:无法分配u“foo”:“Book.author”必须是作者实例
。谢谢。你不是用“django方式”做的。您需要为author字段编写自己的小部件
这样做:
class BookForm():
class Meta:
model = Book
fields = ('title', 'author')
widgets = {
'author': YourFacebookLikeWidgetClass,
}
现在,您的小部件负责完成所有很酷的工作(ajax调用、呈现结果等等),但最终,它将为表单返回正确的值。(作者ID)
阅读更多关于
问题是关于编写自己的小部件的信息并不多,但是您可以在这里询问,并观看一些django小部件的源代码。(写自己的并不复杂:)