1

我有以下型号——</p>

class Book(Model):
 title = CharField(max_length=100)
 author = ForeignKey('Author')

class Author(models.Model):
 name = CharField(max_length=100)

并有一个标准ModelFormBook

在表单中,author是一个ModelChoiceField,并且呈现为一个<select>。我希望它是可以输入作者姓名的文本字段——<code>Author.name。

如果已经有同名作者,则保存的模型在其外键中使用该作者,否则创建同名作者(并在其外键中使用)——实际上,Author.get_or_create(name=posted_name_value).

我发现最简单的方法是将字段覆盖为CharField,就像这样——</p>

class BookForm(ModelForm):

 author = CharField()

 class Meta:
  model = Book

虽然我可以添加自定义clean逻辑来执行我想要的操作,但在使用时我不能对预填充的值做同样的事情BookForm(instance=some_book_object)-CharField设置为Author's pk,而不是它的名称。

我试过这样做,但我似乎不知道怎么做。我试过覆盖东西BookForm.__init__无济于事。

instance与 a 一起使用时如何覆盖字段的值集ModelForm

4

2 回答 2

0

我将添加author到 ModelForm meta'sexclude中,然后有一个名为的表单字段author_name,您使用 填充initial,并在视图的方法中保存到模型中form_valid(假设您使用的是通用表单视图类)。

于 2012-11-05T21:14:20.590 回答
0

您可以通过以下方式覆盖字段内容:

form = BookForm(instance=instance, initial={'name': instance.author.name})
于 2012-11-05T21:09:34.030 回答