Python 带有对象列表的Django表单
提交后,我无法从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
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检索所选对象。谢谢。