django是否有某种方法可以在验证ModelForm之前从中获取值?

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

假设这些为django模型:

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小部件的源代码。(写自己的并不复杂:)