Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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表单_Python_Django_Forms - Fatal编程技术网

Python 带有对象列表的Django表单

Python 带有对象列表的Django表单,python,django,forms,Python,Django,Forms,提交后,我无法从django表单中取回对象 我有一个对象列表(填充了MyObject,而不是django模型),由另一个python包填充 在models.py中,我有: class MyObjectForm(forms.Form): def __init__(self, *args, **kwargs): # Get the list myobjects = kwargs.pop('myobjects') super(MyObjectF

提交后,我无法从django表单中取回对象

我有一个对象列表(填充了
MyObject
,而不是django模型),由另一个python包填充

models.py
中,我有:

class MyObjectForm(forms.Form):

    def __init__(self, *args, **kwargs):
        # Get the list
        myobjects = kwargs.pop('myobjects')
        super(MyObjectForm, self).__init__(*args, **kwargs)
        choices = [(o, o.name) for o in myobjects]
        self.fields["my_objects"] = forms.TypedChoiceField(choices=choices)
有关信息,HTML看起来还可以

views.py
中,当我单击提交按钮时,
form.is\u valid()
总是
False
。有什么问题吗

当我更改models.py时:

self.fields["my_objects"] = forms.TypedChoiceField(choices=choices, required=False)

views.py
中,
form.is\u valid()
True
但我无法取回我的对象
MyObject
(我得到一个空值)。可能吗?如果是,我该怎么做呢?

看看你用了什么作为选择<代码>我的对象实例,真的吗?如何将
MyObject
实例作为HTML表单的一部分发送到浏览器,然后通过POST请求主体返回到服务器

如果您的每个
MyObject
实例都有一些持久的唯一标识符,请将其用于您的选择,即

choices = [(o.some_stable_and_unique_id, o.name) for o in myobjects]

请注意,它不会解决您的所有问题。。。然后,您必须子类化
TypedChoiceField
,以根据对象的“id”等检索对象。

MyObject
是一个具有由另一个包创建的某些属性的项目(不打算保存在数据库中)。我认为这是不可能的。。。我没有唯一标识符,但我可以在
views.py
中创建一个唯一标识符和一个字典,然后在表单构造函数中传递列表,并在表单验证后使用此自定义ID检索所选对象。谢谢。