Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
Django 请求之间的表单/模型表单实例_Django_Django Forms - Fatal编程技术网

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]