Django的ModelChoiceField
是使用ModelForm
从模型中派生表单时用于外键的默认表单字段。经过验证后,该字段将检查所选值是否存在于相应的相关表格中,如果不是这种情况,则会提出ValidationError
。Django ModelChoiceField允许创建对象
我创造具有type
场,外键的Type
模型,它仅包含一个name
属性的Document
模型的形式。这里是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')
而不是标准select
控制的代码,我使用selectize.js提供自动完成给用户。而且,selectize提供了一个“创建”选项,允许在选择中输入一个尚不存在的值。
我想的ModelChoiceField
为了创建一个新的对象Type
当所选值不存在扩展(新值将被分配给name
字段,这应该是可重用性的领域的选项)。如果可能,我希望该对象不会被插入到数据库中,直到在验证的表单上调用save()
(以防止多次失败的验证在db中创建多个行)。在Django中这样做会是一个好方法吗?我试图查看文档和源代码,试图覆盖ModelChoiceField
并试图构建这种基于TextField
的行为,但我不确定是否没有更简单的方法来执行此操作。
我看了下面的问题,但找不到答案。
- Django ModelChoiceField has no plus button
- Django: override RelatedFieldWidgetWrapper
- How to set initial value in a dynamic Django ModelChoiceField
我想继续增加新的类型的尽可能简单的过程 - 即:不使用连接到一个弹出“ +“按钮。用户应该能够输入值,如果该值不存在,则会创建该值。
谢谢
这大概会的工作,但我希望我可以把所有的好的特点'的ModelForm '提供诸如调用'form.save()'(实际的'Document'具有比问题中列出的字段更多的字段)。而且将所有这些封装到它自己的表单域中将会很好:) –