我有一个基本模型:
class MyModel(models.Model):
my_field = models.CharField()
我有这个模型的基本表单:
class MyFrom(forms.ModelForm):
class Meta:
model = MyModel
我有一个执行基本查找的功能(实际上更复杂,正则表达式等不会这样做):
POSSIBLE_VALUES = ['aa', 'bb', 'cc', 'dd']
def lookup(some_value):
if some_value in POSSIBLE_VALUES:
# the value is OK, return a string
return some_value
else:
# constructs the 'did you mean' list of suggestions
didyoumean = [pv for pv in POSSIBLE_VALUES if pv in some_value]
# returns a list which might be empty
return didyoumean
现在,我想要的方案是:
其他一些要求:
所以我假设它将全部分配在这个字段验证和一个自定义小部件之间,它将处理“你是说”列表呈现。我不能把它们放在一起。
需要您的帮助:)
修改。广告。 2要求。 这是我描述的基本功能。在更高级的一个中,我希望这个表单有更多的字段,因此“你的意思”列表应该与所有其他字段错误一起显示(如果有的话)。然后单击提示只会将my_field的值设置为它的值而无需重新加载表单。用户还必须更正其他错误,因此我无法立即执行表单操作。可能只有一些标志可以在这两个选项之间切换(“基本”和“高级”)。
答案 0 :(得分:2)
- 我更希望没有显示“你的意思”列表 必须重新加载页面。
醇>
创建自定义窗口小部件,使用JS代码呈现,以便在用户输入时检查可能的值
- 如果用户点击了我要执行的其中一项建议 表格的行动没有额外的 查找 - 该值已经存在 检查。
醇>
同样,该小部件在点击时应该只提交表单。
- 我希望将所有逻辑保留在视图之外并将其保留在视图中 形式或模型。这是必须的。
醇>
在表单上,您将使用clean()方法来验证所有内容。例如,如果某些虚假数据通过p提交。 2 - 您仍然会提出验证错误。
- 我想避免在模板中使用硬编码的js并将其推入表单中 可能。这不是必须的。
醇>
使用自定义窗口小部件details解决。