首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ModelForm(instance=some_instance)覆盖ModelForm字段值集

使用ModelForm(instance=some_instance)覆盖ModelForm字段值集
EN

Stack Overflow用户
提问于 2012-11-05 20:37:00
回答 2查看 1.8K关注 0票数 1

我有以下模特-

代码语言:javascript
复制
class Book(Model):
 title = CharField(max_length=100)
 author = ForeignKey('Author')

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

并有一个标准的ModelFormBook

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

如果已经有一个具有该名称的作者,则保存的模型将在其外键中使用该名称,否则将创建(并在其外键中使用)-in效应,Author.get_or_create(name=posted_name_value)

我发现最简单的方法是以CharField的形式覆盖字段,就像这样-

代码语言:javascript
复制
class BookForm(ModelForm):

 author = CharField()

 class Meta:
  model = Book

尽管这样我可以添加自定义clean逻辑来做我想做的事情,但是在使用BookForm(instance=some_book_object)-the CharField set设置为Authorpk而不是它的名称时,我不能对预先填充的值做同样的操作。

我试过这样做,但我似乎找不出怎么做的。我尝试过在BookForm.__init__中重写一些东西,但没有结果。

如何在使用instance ModelForm**?**和ModelForm**?**时重写字段的值集

EN

回答 2

Stack Overflow用户

发布于 2012-11-05 21:09:34

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

代码语言:javascript
复制
form = BookForm(instance=instance, initial={'name': instance.author.name})
票数 0
EN

Stack Overflow用户

发布于 2012-11-05 21:14:20

我将author添加到ModelForm元的exclude中,然后使用initial填充一个名为author_name的表单字段,并将其保存到视图的form_valid方法中(假设您使用的是泛型表单视图类)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13239976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档