Не уверен, что лучший способ описать проблему. У меня есть 2 таблицы контакт и атрибут. Таблица контактов содержит 1 запись на человека, а таблица атрибутов - 0, 1 или несколько записей на человека. В настоящее время к ним присоединяется «поддельный» внешний ключ, который на самом деле не является внешним ключом. Если мне нужно будет добавить внешний ключ, то я не буду иметь большого значения, просто имея дело со старыми данными, и изначально не было никакого внешнего ключа. Таким образом, таблицы расположены следующим образом:
контакт:
class contact(models.Model):
contactId = models.AutoField(primary_key=True, db_column='contactId')
firstName = models.CharField(max_length=255, null=True, db_column='firstName')
middleName = models.CharField(max_length=255, null=True, db_column='middleName')
lastName = models.CharField(max_length=255, null=True, db_column='lastName')
атрибут:
class attribute(models.Model):
attributeId = models.AutoField(primary_key=True, db_column='attributeId')
contactId = models.IntegerField(db_index=True, null=True, db_column='contactId')
attributeValue = models.TextField(null=True, db_column='attributeValue')
Итак, я правильно настроил модели Django для представления этих таблиц. Теперь мне нужно выполнить представление и шаблон для циклического перебора этих таблиц, чтобы он генерировал документ XML в следующем формате:
<contacts>
<contact>
<contactId></contactId>
<firstName></firstName>
<lastName></lastName>
<attributes>
<attribute>
<attributeId></attributeId>
<attributeValue></attributeValue>
</attribute>
</attributes>
</contact>
</contacts>
Таким образом, будет список всех контактов и всех атрибутов, связанных с каждым контактом.
Я уверен, что есть простой способ сделать это. На других языках я бы просто написал два зацикленных запроса, чтобы зациклить контакт, а затем зациклить атрибуты для каждого контакта. Однако компания, в которой я работаю, мигрирует на новую платформу и хочет новое приложение, написанное на django / python, которое я все еще пытаюсь изучить.
Любая помощь, которую может оказать каждый, приветствуется.