Django 请求之间的表单/模型表单实例
我想写一个自定义表单字段(可能还有小部件),但我不确定表单实例如何在请求之间共享。例如,如果使用模型实例中的数据呈现表单,则在验证数据时该实例是否仍然可用?如果是这样,这是否意味着在请求之间会有另一个数据库命中来再次查找模型 类似地,如果我编写一个自定义字段,该字段接受一个数据列表,以显示在其Django 请求之间的表单/模型表单实例,django,django-forms,Django,Django Forms,我想写一个自定义表单字段(可能还有小部件),但我不确定表单实例如何在请求之间共享。例如,如果使用模型实例中的数据呈现表单,则在验证数据时该实例是否仍然可用?如果是这样,这是否意味着在请求之间会有另一个数据库命中来再次查找模型 类似地,如果我编写一个自定义字段,该字段接受一个数据列表,以显示在其\uuuu init\uuuu方法中,那么当用户发布数据时,该数据列表是否可用于验证 如果有人能告诉我django源代码中发生这种情况的部分,那将非常有帮助。我一直在看,从,但我仍然不能100%确定这一切是
\uuuu init\uuuu
方法中,那么当用户发布数据时,该数据列表是否可用于验证
如果有人能告诉我django源代码中发生这种情况的部分,那将非常有帮助。我一直在看,从,但我仍然不能100%确定这一切是如何进行的
最后,我想做的是创建一个类似这样的字段(关键部分是最后一行):
下一次请求时,该数据是否可用?如果我创建一个自定义的forms.Form
并用数据命令初始化它,那么在下一次请求时它是否可用?(例如,采用工厂方法或其他方法…)
旁注:我这样做是因为我希望(最终)使用类似于引导的东西,我希望传递“漂亮的值”,然后将其转换为服务器端(基本上,就像select中的选项值如何具有不同的提交值)。我过去曾使用客户端javascript实现过这一点,但最好将其整合到表单字段中。表单没有什么神奇之处。像Django中的其他东西一样(或者几乎任何web框架),对象不会在请求之间持久化,每次都需要重新实例化。这在表单处理的普通视图模式中发生:您为POST实例化一次,为GET实例化一次。如果您有与表单相关联的数据,则每次都需要传入。好的,这非常有用。因此,如果您将一个实例传递给一个模型表单,那么您不能使用它来验证数据,除非您在数据库中查询它?
class CustomField(ChoiceField):
def __init__(self, data_dict, **kwargs):
super(CustomField, self).__init__(**kwargs)
self.data_dict = data_dict
self.choices = data_dict.keys()
def validate(self, value):
if value not in self.data_dict:
raise ValidationError("Invalid choice")
else:
return self.data_dict[value]