【发布时间】:2016-03-04 00:36:51
【问题描述】:
Django 的ModelChoiceField 是使用ModelForm 从模型派生表单时用于外键的默认表单字段。验证后,该字段将检查所选值是否存在于相应的相关表中,如果不存在则引发ValidationError。
我正在为 Document 模型创建一个表单,该模型具有 type 字段,Type 模型的外键只包含 name 属性。为了清楚起见,这是models.py的代码
class Type(models.Model):
name = models.CharField(max_length=32)
class Document(models.Model):
title = models.CharField(max_length=256)
type = models.ForeignKey(Type, related_name='related_documents')
我使用selectize.js 来为用户提供自动完成功能,而不是标准的select 控件。此外,selectize 提供了一个“创建”选项,允许在选择中输入一个尚不存在的值。
我想扩展ModelChoiceField以便在选择的值不存在时创建一个新的Type对象(新值将分配给name字段,这应该是字段的一个选项为了可重用性)。如果可能,我希望在验证表单上调用save() 之前不要将对象插入数据库(以防止多次失败的验证在数据库中创建多行)。在 Django 中这样做的好方法是什么?我尝试查看文档和源代码,尝试覆盖 ModelChoiceField 并尝试基于 TextField 构建这种行为,但我不确定是否有更简单的方法来做到这一点。
我查看了以下问题,但找不到答案。
- Django ModelChoiceField has no plus button
- Django: override RelatedFieldWidgetWrapper
- How to set initial value in a dynamic Django ModelChoiceField
我想让添加新类型的过程尽可能简单 - 即:不要使用附加到“+”按钮的弹出窗口。用户应该能够键入该值,如果该值不存在,则会创建该值。
谢谢
【问题讨论】: