为了账号安全,请及时绑定邮箱和手机立即绑定

Django ModelForm 类:删除外键下拉菜单约束

Django ModelForm 类:删除外键下拉菜单约束

胡说叔叔 2023-07-05 16:30:11
我正在使用 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(或其他易于解析的其他内容)形式提交词条数据并对其进行解析。对于每个结果,如果词条不存在,您可以在数据库中创建它,然后关联定义。如果确实如此,您只需将其关联即可。

如果它有效,下一步就是找到一个允许您遵循相同思维方式的小部件 - 我想不出任何,抱歉:/


查看完整回答
反对 回复 2023-07-05
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信