I need to write model data (CharFields only) to an XML file to contain the data for a flash file. I am new to this, and the process is a little unclear to me for doing this in django. I am creating an xml file, and then writing the text data to the file (as is done with the csv module, but to xml). A very simplified xml file should result for the flash file to read, ie:
<?xml version="1.0" encoding="UTF-8"?>
<textFields>
<textField id="0" text="HELLO WORLD" />
<textField id="1" text="HELLO EARTH" />
...
</textFields>
1. I am using a serializer to write the xml data from the model:
from django.core import serializers
data = serializers.serialize('xml', myModel.objects.filter(instanceIwantTowrite), fields=('fieldName'))
2. I then create file using core.files:
from django.core.files import File
f = open('/path/to/new/dir/content.xml', 'w')
myfile = File(f)
3. Write File data and close:
myfile.write(data)
myfile.close()
This works so far, although the xml output contains the fields for the object “django-objects” etc, and I will have to see if I can interpret this in ActionScript easily for the flash file. I would prefer to define the xml field names manually like in the csv module. As I am new to django and python, I am wondering if there is an easier, simpler way to do this?
Note: In serializer I use filter on the model objects because using get for the model instance returns an object not iterable error. In fact I filter it twice to get a single instance, seems like there must be a better way.
You have two possible solutions here:
1.
You can extend base django xml serializer(
django.core.serializers.xml_serializer.Serializer) and modify it so it will return data in your structure. You could then run ex.and it will output data in your structure.
2.
Write simple function that will render template with your data structure and return xml data in your format:
Python code
Template xml_template.xml