Ric*_*ard 3 database django django-templates django-models left-join
不确定描述问题的最佳方法是什么.我有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')
Run Code Online (Sandbox Code Playgroud)
属性:
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')
Run Code Online (Sandbox Code Playgroud)
所以我已经正确设置了Django模型来表示这些表.现在我需要完成的是一个循环遍历这些表的视图和模板,以便它以下列格式生成一个xml doc:
<contacts>
<contact>
<contactId></contactId>
<firstName></firstName>
<lastName></lastName>
<attributes>
<attribute>
<attributeId></attributeId>
<attributeValue></attributeValue>
</attribute>
</attributes>
</contact>
</contacts>
Run Code Online (Sandbox Code Playgroud)
因此,将列出所有联系人以及与每个联系人关联的所有属性.
我确信有一种简单的方法可以实现这一目标.在其他语言中,我会简单地编写两个循环查询来遍历联系人,然后遍历每个联系人的属性.然而,我工作的公司正在迁移到一个新的平台,并希望用django/python编写的新应用程序,我仍在努力学习.
任何人都可以提供任何帮助表示赞赏.
假设您已经设置了django模型以使用当前的数据库设置,如果我没有设置外键,我会执行以下操作.
contacts = Contact.objects.all()
for contact in contacts:
contact.attributes = Attribute.objects.filter(contactId=contact.pk)
return render_to_response("mytemplate.html", {'contacts': contacts })
Run Code Online (Sandbox Code Playgroud)
或者,保存一些查询;
attributes_map = dict(
[(attribute.contactId, attribute) for attribute in \
Attribute.objects.filter(contactId__in=[contact.pk for contact in contacts])]
)
for contact in contacts:
contact.attributes = attributes_map.get(contact.pk)
return render_to_response("mytemplate.html", {'contacts': contacts })
Run Code Online (Sandbox Code Playgroud)
模板
<contacts>
{% for contact in contacts %}
<contact>
<contactId>{{ contact.pk }}</contactId>
<firstName>{{ contact.firstName }}</firstName>
<lastName>{{ contact.lastName }}</lastName>
{% if contact.attributes %}
<attributes>
{% for attribute in contact.attributes %}
<attribute>
<attributeId>{{ attribute.pk }}</attributeId>
<attributeValue>{{ attribute.attributeValue }}</attributeValue>
</attribute>
{% endfor %}
</attributes>
{% endif %}
</contact>
{% endfor %}
</contacts>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2936 次 |
| 最近记录: |