假设这些为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
。谢谢。
答案 0 :(得分:1)
你不是“django方式”。你需要为作者字段编写自己的小部件。
并做这样的事情:
class BookForm():
class Meta:
model = Book
fields = ('title', 'author')
widgets = {
'author': YourFacebookLikeWidgetClass,
}
现在,你的小部件负责做你所有很酷的事情,(ajax调用,渲染结果......等),但最后,它将为表单返回正确的值。 (作者ID)
详细了解django widgets
问题在于没有很多关于编写自己的小部件的信息,但是你总是可以在这里询问,并观看一些django小部件的源代码。 (编写自己的文件并不复杂:))