我有一个巨大的django表单,我需要创建dict,其中键是模板中的字段ID,值是初始值? 像这样:
{'field1_id_in_template': value1, ...}
有人知道那是怎么做的吗?
我可以在form.fields字典中为每个字段名称添加前缀'id_',但如果有人更改了widget.attrs的id,我可能会遇到问题
答案:
这是CBV的方法:
def post_ajax(self, request, *args, **kwargs):
form = ChooseForm(request.POST, log=log)
if form.is_valid():
instance = form.save()
inst_form = InstanceForm(instance=instance, account=request.user)
fields = {}
for name in inst_form.fields:
if name in inst_form.initial:
fields[inst_form.auto_id % name] = inst_form.initial[name]
return HttpResponse(
json.dumps({'status': 'OK','fields':fields},
mimetype='appplication/json'
)
assert False
这就是为什么我这样做的原因: 有了这个回复,我可以在客户端上写这样的东西。现在我不需要手动初始化页面上的所有字段
function mergeFields(data) {
for(var id in data) {
$("#"+id).val(data[id]).change();
}
}
答案 0 :(得分:0)
如果您将auto_id设置为True,则可以使用form_object_instance.field_name.auto_id获取id。考虑到这一点,您可以通过迭代表单对象来创建您的dict。
我只是想知道为什么你需要进行这样的处理,因为表单对象通常用于封装这样的行为......
答案 1 :(得分:0)
您可以尝试 getattr 。
例如,您有一个已知的键列表
['field1_id_in_template', 'field2_id_in_template', ...]
然后:
my_values = dict()
for key in key_list:
value = getattr(your_form, key)
# now do something with it
my_values[key] = deal_with(value)