Django ModelForm Class: 删除外键下拉菜单约束
Django ModelForm Class: Remove Foreign Key Dropdown Menu Constraint
我正在使用 Django 开发字典应用程序。我无法使用 Django 的 ModelForm
class 成功创建表单,该表单允许用户向 BOTH 现有 AND[=48= 提交新定义] 新词典词条
我的models.py:
class Headword(models.Model):
headword = models.CharField(max_length=64, unique=True)
class Definition(models.Model):
definition = models.CharField(max_length=64)
headword = models.ForeignKey(Headword, related_name="definitions_headword")
我的forms.py:
class DefinitionForm(forms.ModelForm):
class Meta:
model = Definition
fields = ["headword", "definition"]
我的HTML表格:
<form action="{% url 'dictionary:define' %}" method="post">
{% csrf_token %}
{{ form }}
<button type="submit">Define</button>
</form>
所有的结果是一个表格:
- 包含数据库中已有的所有词条的下拉菜单,
- 用于定义的文本输入字段,
- 提交按钮。
因此,使用上述代码,用户仅允许向已经存在的词条添加定义。
正如我所说,我想更改它并拥有此表单,以便用户能够向 BOTH 现有词条(下拉菜单中的词条)提交定义, AND 新的(用户可以直接输入的)。这意味着我根本不需要表单中的下拉菜单,而只需要两个不受约束的文本输入字段和一个提交按钮。
我怎样才能做到这一点?
PS:我尝试使用 DefinitionForm
class 中的 widgets
字典将下拉菜单覆盖为文本输入字段。但是,当我尝试提交表单时,这会导致标题词表单字段上方出现一条错误消息:
Select a valid choice. That choice is not one of the available choices.
由于您有一个 ForeignKey 类型的字段,它会自动将小部件更改为下拉列表,因此我会在小部件字典中保留该更改。
您似乎在寻找 many-to-many 关系。查看 Django 文档并查找表单集和内联表单集。
但是如果你想在创建定义的同时创建新的词条,那部分就有点棘手了。
只是为了测试,尝试将字段更改为常规文本输入以将词条数据作为 CSV(或其他易于解析的格式)提交并解析。对于每个结果,如果词条不存在,则在数据库中创建它,然后关联定义。如果是你就联想一下。
如果可行,下一步就是找到一个可以让您遵循相同思维方式的小部件 - 我想不出任何一个,抱歉 :/
我正在使用 Django 开发字典应用程序。我无法使用 Django 的 ModelForm
class 成功创建表单,该表单允许用户向 BOTH 现有 AND[=48= 提交新定义] 新词典词条
我的models.py:
class Headword(models.Model):
headword = models.CharField(max_length=64, unique=True)
class Definition(models.Model):
definition = models.CharField(max_length=64)
headword = models.ForeignKey(Headword, related_name="definitions_headword")
我的forms.py:
class DefinitionForm(forms.ModelForm):
class Meta:
model = Definition
fields = ["headword", "definition"]
我的HTML表格:
<form action="{% url 'dictionary:define' %}" method="post">
{% csrf_token %}
{{ form }}
<button type="submit">Define</button>
</form>
所有的结果是一个表格:
- 包含数据库中已有的所有词条的下拉菜单,
- 用于定义的文本输入字段,
- 提交按钮。
因此,使用上述代码,用户仅允许向已经存在的词条添加定义。
正如我所说,我想更改它并拥有此表单,以便用户能够向 BOTH 现有词条(下拉菜单中的词条)提交定义, AND 新的(用户可以直接输入的)。这意味着我根本不需要表单中的下拉菜单,而只需要两个不受约束的文本输入字段和一个提交按钮。
我怎样才能做到这一点?
PS:我尝试使用 DefinitionForm
class 中的 widgets
字典将下拉菜单覆盖为文本输入字段。但是,当我尝试提交表单时,这会导致标题词表单字段上方出现一条错误消息:
Select a valid choice. That choice is not one of the available choices.
由于您有一个 ForeignKey 类型的字段,它会自动将小部件更改为下拉列表,因此我会在小部件字典中保留该更改。
您似乎在寻找 many-to-many 关系。查看 Django 文档并查找表单集和内联表单集。
但是如果你想在创建定义的同时创建新的词条,那部分就有点棘手了。
只是为了测试,尝试将字段更改为常规文本输入以将词条数据作为 CSV(或其他易于解析的格式)提交并解析。对于每个结果,如果词条不存在,则在数据库中创建它,然后关联定义。如果是你就联想一下。
如果可行,下一步就是找到一个可以让您遵循相同思维方式的小部件 - 我想不出任何一个,抱歉 :/