我有以下型号 -
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
。
如果已有具有该名称的作者,则保存的模型在其外键中使用该名称,否则将创建具有该名称的作者(并在其外键中使用) - 效果为Author.get_or_create(name=posted_name_value)
。
我发现最简单的方法是将字段覆盖为CharField
,就像这样 -
class BookForm(ModelForm):
author = CharField()
class Meta:
model = Book
尽管如此,我可以添加自定义clean
逻辑来执行我想要的操作,但在使用BookForm(instance=some_book_object)
时,我无法对预先填充的值执行相同操作 - CharField
获取设置为Author
的{{1}},而不是其名称。
我试过这样做,但我似乎无法弄清楚如何。我试图在pk
中覆盖一些内容但无济于事。
将BookForm.__init__
与instance
一起使用时,如何覆盖字段的值集?
答案 0 :(得分:0)
您可以通过以下方式覆盖字段内容:
form = BookForm(instance=instance, initial={'name': instance.author.name})
答案 1 :(得分:0)
我将author
添加到ModelForm元的exclude
,然后有一个名为author_name
的表单字段,使用initial
填充,并保存到模型中view的form_valid
方法(假设您使用的是通用表单视图类)。