我正在使用 Django 开发一个字典应用程序。我在使用 Django 类成功创建表单时遇到问题,该类允许用户向现有和ModelForm新词典词条提交新定义。我的模型.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>所有的结果是一个表格:包含数据库中已有的所有词条的下拉菜单,定义的文本输入字段,提交按钮。因此,使用上述代码,仅允许用户向已存在的词条添加定义。正如我所说,我想改变这一点并采用这种形式,以便用户能够向现有词条(下拉菜单中的词条)和新词条(用户只需输入的词条)提交定义。这意味着我根本不需要表单中的下拉菜单,而只需要两个不受约束的文本输入字段和一个提交按钮。我怎样才能做到这一点?widgetsPS:我尝试使用类中的字典将下拉菜单覆盖为文本输入字段DefinitionForm。然而,当我尝试提交表单时,这会导致标题表单字段上方出现一条错误消息:选择一个有效的选择。该选择不是可用的选择之一。
1 回答
慕码人8056858
TA贡献1803条经验 获得超6个赞
由于您有一个外键类型字段,它会自动将小部件更改为下拉列表,因此我会将这一更改保留在小部件字典中。
看起来您正在寻找多对多关系。查看 Django 文档并查找表单集和内联表单集。
但是,如果您打算在创建定义的同时创建新的中心词,那么这部分就有点棘手了。
为了进行测试,请尝试将该字段更改为常规文本输入,以 CSV(或其他易于解析的其他内容)形式提交词条数据并对其进行解析。对于每个结果,如果词条不存在,您可以在数据库中创建它,然后关联定义。如果确实如此,您只需将其关联即可。
如果它有效,下一步就是找到一个允许您遵循相同思维方式的小部件 - 我想不出任何,抱歉:/
添加回答
举报
0/150
提交
取消