【发布时间】:2015-10-06 00:09:46
【问题描述】:
首先,我试图研究我的问题,但找不到我需要的东西。我的问题可能与我的项目设计有关(任何帮助将不胜感激)。
我面临的问题如下:
- 我有几个模型
- 我有一个专门用于创建 ModelForm 的模型
- 在这个模型中,我有 ForeignKey 字段,默认情况下表示为 ModelForm 中的选择/选项输入小部件(对于每个 value 属性是 ForeignKey,标签之间的文本是 ForeignKey 指向的模型的
__str__()to. 用户看到__str__()并且提交了option标签的value属性,很棒)。 - 到目前为止一切顺利,但我想用输入文本字段替换小部件,以便将其实现为搜索字段。
- 现在,当用户提交表单时,在文本输入字段中输入的字符串被提交,当然 django 不喜欢这样,因为它需要一个外键
我已经可以想出一些解决问题的方法,并且我确信我可以让它发挥作用,但每个人都觉得我会违反一些最佳实践。所以我的问题是我该怎么办?
- 我是否从 ModelForm 中排除此特定字段并将其实现为输入文本字段,然后在提交表单后使用其值进行查询,然后将 ForeignKey 存储到数据库中
- 我是否在提交时使用 JavaScript 操作数据,以便 Django 接收正确的信息
- 我可以用 Django 清理这些字段数据并将其从字符串转换为 FK 吗?
- 我是不是走错了路,还是有针对这种情况的 Django 功能?
【问题讨论】:
-
所以您想要一个链接到您的选择字段选项的搜索功能?或者您是否希望用户能够提交输入框中显示的搜索数据?
-
创建一个自动完成的 Ajax 搜索字段,用于查询数据库、收集 id 并将其添加到表单值中。
-
@MatthewR。计划是让用户提交输入框中显示的数据,然后用 Django 更改它,以便可以将其放置在模型中
-
@petkostas 这听起来是个不错的解决方案,我会尝试一下,谢谢你们的帮助!关于使用 Django 更改数据的初始计划 - 我尝试定义
clean_<fieldname>()方法并返回外键而不是字符串。它没有用。我发现这个字段根本没有进入cleaned_data。验证过程中的较早步骤可能不是验证它。会是这样吗?如果更改此表单字段类型会起作用吗(因为它是ModelForm,默认表单字段是ModelChoiceField) -
@petkostas 现在我想一想,如果我进行 Ajax 调用并将 id 添加到表单值中,它将改变用户看到的内容(用户应该看到一个字符串,该字符串表示不是来自数据库的 ID)