0

假设这些是 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。谢谢你。

4

1 回答 1

1

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

并做这样的事情:

class BookForm():

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

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

阅读有关django 小部件的更多信息

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

于 2012-12-22T11:26:36.747 回答