Django ForeignKey表单字段小部件

时间:2015-07-16 13:45:30

标签: python django forms

首先,我试图研究我的问题,但一直无法找到我需要的东西。我的问题可能与我的项目设计有关(任何帮助都会受到赞赏)。

我面临的问题如下:

  • 我有几个模特
  • 我有一个专门用于创建ModelForm的模型
  • 在这个模型中,我有一个ForeignKey字段,默认表示为ModelForm中的select / option输入窗口小部件(对于每个值属性,ForeignKey和标记之间的文本是模型的__str__() ForeignKey指向。用户看到提交了选项标签的__str__()和value属性,这很棒。)
  • 到目前为止一直很好,但我想用输入文本字段替换小部件,以便将其作为搜索字段实现。
  • 现在,当用户提交表单时,提交了在文本输入字段中输入的字符串,当然django不喜欢它,因为它需要外键

我已经可以想到一些问题的解决方案,我相信我可以让它发挥作用,但每个人都觉得我会违反一些最佳做法。所以我的问题是我应该怎么做?

  • 我是否从ModelForm中排除此特定字段并将其作为输入文本字段实现,然后在表单提交后使用它的值进行查询,然后将ForeignKey存储到数据库
  • 我是否在提交时使用JavaScript操纵数据,以便Django收到正确的信息
  • 我可以使用Django清理此字段数据并将其从字符串转换为FK吗?
  • 我是否采用了错误的方法,或者有这种情况的Django功能?

1 个答案:

答案 0 :(得分:0)

如果有人有同样的问题,这里是解决方案(至少我的问题): 我尝试使用clean_<fieldname>方法将用户输入的字符串更改为数据库ID。由于表单字段和窗口小部件之间存在差异,因此验证过程较早停止,因此该方法无法执行。我将表单字段重新定义为CharField,以便验证步骤正常工作,然后clean_<fieldname>方法执行没有问题。