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>

所有的结果是一个表格:

  1. 包含数据库中已有的所有词条的下拉菜单,
  2. 用于定义的文本输入字段,
  3. 提交按钮。

因此,使用上述代码,用户允许向已经存在的词条添加定义。

正如我所说,我想更改它并拥有此表单,以便用户能够向 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(或其他易于解析的格式)提交并解析。对于每个结果,如果词条不存在,则在数据库中创建它,然后关联定义。如果是你就联想一下。

如果可行,下一步就是找到一个可以让您遵循相同思维方式的小部件 - 我想不出任何一个,抱歉 :/