This is my code. I'm trying to translate xml string into python list to be shown in html template.

self.task_xml = "<?xml version="1.0" encoding="utf-8"?> <django-objects version="1.0"> <object model="task.task" pk="31"> <field name="name" type="CharField">New Task</field> <field name="parent_task_id" type="IntegerField">0</field> </object> <object model="task.task" pk="32"> <field name="name" type="CharField">New Task</field> <field name="parent_task_id" type="IntegerField">0</field> </object> <object model="task.task" pk="33"> <field name="name" type="CharField">New Task</field> <field name="parent_task_id" type="IntegerField">31</field> </object> <object model="task.task" pk="34"> <field name="name" type="CharField">New Task</field> <field name="parent_task_id" type="IntegerField">31</field> </object> </django-objects>" 58 self.xmlData = ET.fromstring(self.db.task_xml) 59 60 self.task_list = [] 61 taskList = [] 62 for obj in self.xmlData.iter("object"): 63 parent_task_id = obj.find("field[@name='parent_task_id']").text 64 if parent_task_id == EMPTY_UUID: 65 taskList.append({'id': obj.get("pk"), 66 'name': obj.find("field[@name='name']").text, 67 'parent_task_id': parent_task_id , 68 }) 69 # Apprend taskList: 70 for task in taskList: 71 taskViewModel = TaskViewModel(task.id, True) 72 self.task_list.append(taskViewModel) 

But I'm getting the error:

'dict' object has no attribute 'id' 

And it is task.id in line 71

Do you think I have a problem with this in line 65:

'id': obj.get("pk") 
1

2 Answers

You are accessing the dictionary wrongly. You need to use subscript with string 'id' , Example -

taskViewModel = TaskViewModel(task['id'], True) 
2

I got the same error when accessing "id" in dictionary with dot "." like JavaScript as shown below because I also use JavaScript quite often in addition to Python:

user = {"id": 1, "name": "John"} print(user.id) # Error 

So, I accessed "id" with brackets "[]" as shown below then the error was solved:

user = {"id": 1, "name": "John"} print(user["id"]) # 1 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy