django有没有办法在模型验证之前从ModelForm中获取价值?

时间:2012-12-22 06:50:38

标签: django django-forms

假设这些为django模型:

class Author():

    name = charfield()

class Book():

    title = charfield()
    author = foreignkey()

ModelForm

class BookForm():

    # i override the author field
    author = models.CharField()

    class Meta:
        model = Book
        fields = ('title', 'author')

我正在使用自动完成插件(比如facebook搜索,所以我可以填写作者字段而不使用选择字段)。问题是,我无法从author字段分配值,因为它不是作者的实例,它是一个字符串。所以我想在验证之前操纵它。我尝试修改QueryDict但是不可变。只要我使用form = BookForm(request.POST)调用表单,就会收到错误:Cannot assign u"foo":"Book.author" must be an Author instance。谢谢。

1 个答案:

答案 0 :(得分:1)

你不是“django方式”。你需要为作者字段编写自己的小部件。

并做这样的事情:

class BookForm():

    class Meta:
        model = Book
        fields = ('title', 'author')
        widgets = {
        'author': YourFacebookLikeWidgetClass,
    }

现在,你的小部件负责做你所有很酷的事情,(ajax调用,渲染结果......等),但最后,它将为表单返回正确的值。 (作者ID)

详细了解django widgets

问题在于没有很多关于编写自己的小部件的信息,但是你总是可以在这里询问,并观看一些django小部件的源代码。 (编写自己的文件并不复杂:))