Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django ForeignKey表单字段小部件_Python_Django_Forms - Fatal编程技术网

Python Django ForeignKey表单字段小部件

Python Django ForeignKey表单字段小部件,python,django,forms,Python,Django,Forms,首先,我试图研究我的问题,但没有找到我需要的。我的问题可能与我的项目设计有关(如有任何帮助,将不胜感激) 我面临的问题如下: 我有几个模型 我有一个专门用于创建模型表单的模型 在这个模型中,我有一个ForeignKey字段,默认情况下在ModelForm中表示为一个选择/选项输入小部件(对于每个值属性,ForeignKey是ForeignKey,标记之间的文本是ForeignKey指向的模型的\uu str\uuuuuuuuuuuuuuuuuuu()。用户看到\uuuuuu str\uuuuu

首先,我试图研究我的问题,但没有找到我需要的。我的问题可能与我的项目设计有关(如有任何帮助,将不胜感激)

我面临的问题如下:

  • 我有几个模型
  • 我有一个专门用于创建模型表单的模型
  • 在这个模型中,我有一个ForeignKey字段,默认情况下在ModelForm中表示为一个选择/选项输入小部件(对于每个值属性,ForeignKey是ForeignKey,标记之间的文本是ForeignKey指向的模型的
    \uu str\uuuuuuuuuuuuuuuuuuu()
    。用户看到
    \uuuuuu str\uuuuuuuuuuuuuuuuuu())
    选项标签的value属性已提交,这很好)
  • 到目前为止还不错,但是我想用一个输入文本字段替换这个小部件,这样我就可以将它实现为一个搜索字段
  • 现在,当用户提交表单时,文本输入字段中输入的字符串被提交,django当然不喜欢这样,因为它需要一个外键
我已经想到了一些解决问题的方法,我相信我能让它发挥作用,但每一个方法都让我觉得我违反了一些最佳实践。所以我的问题是我应该怎么做

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

如果有人有相同的问题,这里有解决方案(至少是我的问题):
我尝试使用
clean\u
方法将用户输入的字符串更改为数据库id。由于表单字段和小部件之间的差异,验证过程提前停止,因此该方法未执行。我将表单字段重新定义为
CharField
,以便验证步骤正常工作,然后执行
clean\ucode>方法时不会出现问题。

如果有人有相同的问题,这里有解决方案(至少是我的问题):
我尝试使用
clean\u
方法将用户输入的字符串更改为数据库id。由于表单字段和小部件之间的差异,验证过程提前停止,因此该方法未执行。我将表单字段重新定义为
CharField
,这样验证步骤就开始了,然后
clean
方法就可以毫无问题地执行了。

那么您想要一个链接到所选字段选项的搜索功能吗?还是希望用户能够提交输入框中显示的搜索数据?创建一个自动完成Ajax搜索字段,该字段查询数据库,收集id并将其添加到表单值中。@MatthewR。计划是让用户提交输入框中显示的数据,然后使用Django对其进行更改,以便将其放置在model@petkostas这听起来是个不错的解决方案,我要试试。谢谢你们两位的帮助!关于使用Django更改数据的初始计划,我尝试定义一个
clean_u3;()
方法,并返回外键而不是字符串。它不起作用。我发现这个字段根本不在
cleaned_数据中。验证过程中的早期步骤可能不是验证它。会是这样吗?如果改变这个表单字段类型(因为它是一个
ModelForm
默认表单字段是
modelcoocefield
)@petkostas现在我想了想,如果我调用Ajax并将id添加到表单值中,它会改变用户看到的内容(用户应该看到一个字符串,它表示的不是DB中的id)那么您想要一个链接到您的选择字段的选项的搜索功能?还是希望用户能够提交输入框中显示的搜索数据?创建一个自动完成Ajax搜索字段,该字段查询数据库,收集id并将其添加到表单值中。@MatthewR。计划是让用户提交输入框中显示的数据,然后使用Django对其进行更改,以便将其放置在model@petkostas这听起来是个不错的解决方案,我要试试。谢谢你们两位的帮助!关于使用Django更改数据的初始计划,我尝试定义一个
clean_u3;()
方法,并返回外键而不是字符串。它不起作用。我发现这个字段根本不在
cleaned_数据中。验证过程中的早期步骤可能不是验证它。会是这样吗?如果改变这个表单字段类型(因为它是一个
ModelForm
默认表单字段是
modelcoocefield
)@petkostas现在我想了想,如果我调用Ajax并将id添加到表单值中,它会改变用户看到的内容(用户应该看到一个字符串,它表示的不是DB中的id)