我有以下模特-
class Book(Model):
title = CharField(max_length=100)
author = ForeignKey('Author')
class Author(models.Model):
name = CharField(max_length=100)并有一个标准的ModelForm到Book。
在表单中,author是一个ModelChoiceField,并且呈现为一个<select>。我希望它是文本字段,您可以在其中输入作者的名字-Author.name。
如果已经有一个具有该名称的作者,则保存的模型将在其外键中使用该名称,否则将创建(并在其外键中使用)-in效应,Author.get_or_create(name=posted_name_value)。
我发现最简单的方法是以CharField的形式覆盖字段,就像这样-
class BookForm(ModelForm):
author = CharField()
class Meta:
model = Book尽管这样我可以添加自定义clean逻辑来做我想做的事情,但是在使用BookForm(instance=some_book_object)-the CharField set设置为Author的pk而不是它的名称时,我不能对预先填充的值做同样的操作。
我试过这样做,但我似乎找不出怎么做的。我尝试过在BookForm.__init__中重写一些东西,但没有结果。
如何在使用instance ModelForm**?**和ModelForm**?**时重写字段的值集
发布于 2012-11-05 21:09:34
您可以通过以下方式覆盖字段内容:
form = BookForm(instance=instance, initial={'name': instance.author.name})发布于 2012-11-05 21:14:20
我将author添加到ModelForm元的exclude中,然后使用initial填充一个名为author_name的表单字段,并将其保存到视图的form_valid方法中(假设您使用的是泛型表单视图类)。
https://stackoverflow.com/questions/13239976
复制相似问题