我正在开发一个django应用程序,它需要创建XML文件来响应请求。我的模型设置如下:
# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
# * Rearrange models' order
# * Make sure each model has one field with primary_key=True
# * Make sure each ForeignKey has `on_delete` set to the desired behavior.
# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
from django.db import models
class Color(models.Model):
id = models.AutoField(db_column='ID', primary_key=True) # Field name made lowercase.
name = models.CharField(db_column='Name', unique=True, max_length=255) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Data_Colors'
def __str__(self):
return "Color: [" + self.id.__str__() + ", " + self.name + "] "
class Company(models.Model):
orders = models.ManyToManyField('Order', through='OrderCompany')
id = models.AutoField(db_column='ID', primary_key=True) # Field name made lowercase.
name = models.CharField(db_column='Name', max_length=255, blank=True, null=True) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Data_Companies'
def __str__(self):
return "Company:[" + self.orders.__str__() + ", " + self.id.__str__() + ", " + self.name + "] "
class ModelColor(models.Model):
color = models.ForeignKey(Color, models.DO_NOTHING, db_column='ColorID')
id = models.AutoField(db_column='ID', primary_key=True) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Data_ModelColors'
def __str__(self):
return "ModelColor:[" + self.color + ", " + self.id.__str__() + "] "
class ModelData(models.Model):
colors = models.ManyToManyField('Color', through='ModelDataColor')
sizes = models.ManyToManyField('Size', through='ModelDataSize')
id = models.AutoField(db_column='ID', primary_key=True) # Field name made lowercase.
name = models.CharField(db_column='Name', max_length=255) # Field name made lowercase.
descript = models.CharField(db_column='Descript', max_length=2047, blank=True, null=True) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Data_ModelData'
def __str__(self):
return "ModelData:[" + self.colors.__str__() + ", " + self.sizes.__str__() + ", " + self.id.__str__() + ", " + self.name + ", " + self.descript + ", " + "] "
class Modeldatacolor(models.Model):
model_data = models.ForeignKey(ModelData, models.DO_NOTHING, db_column='ModelDataID', primary_key=True)
color = models.ForeignKey(Color, models.DO_NOTHING, db_column='ColorID')
class Meta:
managed = False
db_table = 'Data_ModelDataColors'
unique_together = (('model_data', 'color'),)
def __str__(self):
return "Modeldatacolor:[" + self.model_data.__str__() + ", " + self.color.__str__() + "] "
class Modeldatasize(models.Model):
model_data = models.ForeignKey(ModelData, models.DO_NOTHING, db_column='ModelDataID', primary_key=True)
size = models.ForeignKey('Size', models.DO_NOTHING, db_column='SizeID')
class Meta:
managed = False
db_table = 'Data_ModelDataSizes'
unique_together = (('model_data', 'size'),)
def __str__(self):
return "Modeldatasize:[" + self.model_data.__str__() + ", " + self.size.__str__() + "] "
class Modelsize(models.Model):
color = models.ForeignKey(ModelColor, models.DO_NOTHING, db_column='ColorID')
size = models.ForeignKey('size', models.DO_NOTHING, db_column='SizeID')
amount = models.IntegerField(db_column='Amount') # Field name made lowercase.
amountfinished = models.IntegerField(db_column='AmountFinished') # Field name made lowercase.
class Meta:
managed = False
db_table = 'Data_ModelSizes'
def __str__(self):
return "Modelsize:[" + self.color.__str__() + ", " + self.size.__str__() + ", " + self.amount+ ", " + self.amountfinished + "] "
class Model(models.Model):
model_color = models.ForeignKey(ModelColor, models.DO_NOTHING, db_column='ModelColorID')
order = models.ForeignKey('Order', models.DO_NOTHING, db_column='OrderID')
model_data = models.ForeignKey(ModelData, models.DO_NOTHING, db_column='ModelDataID')
id = models.AutoField(db_column='ID', primary_key=True) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Data_Models'
def __str__(self):
return "Model:[" + self.model_color.__str__() + ", " + self.order.__str__() + ", " + self.model_data.__str__() + ", " + self.id.__str__() + "] "
class Ordercompany(models.Model):
order = models.ForeignKey('Order', models.DO_NOTHING, db_column='OrderID', primary_key=True)
company = models.ForeignKey(Company, models.DO_NOTHING, db_column='CompanyID')
stage_number = models.IntegerField(db_column='StageNumber')
class Meta:
managed = False
db_table = 'Data_OrderCompanies'
unique_together = (('order', 'company'),)
def __str__(self):
return "Ordercompany:[" + self.order.__str__() + ", " + self.company.__str__() + ", " + self.stage_number + "] "
class Order(models.Model):
id = models.AutoField(db_column='ID', primary_key=True) # Field name made lowercase.
ordertimestamp = models.DateTimeField(db_column='OrderTimeStamp', blank=True, null=True) # Field name made lowercase.
finishtimestamp = models.DateTimeField(db_column='FinishTimeStamp', blank=True, null=True) # Field name made lowercase.
name = models.CharField(db_column='Name', max_length=255) # Field name made lowercase.
confirmed = models.IntegerField(db_column='Confirmed') # Field name made lowercase.
class Meta:
managed = False
db_table = 'Data_Orders'
def __str__(self):
self.ordertimestamp = "None"
self.finishtimestamp = "None"
return "Order:[" + self.id.__str__() + ", " + self.ordertimestamp + ", " + self.finishtimestamp + ", " + self.name + ", " + self.confirmed.__str__() + "] "
class Size(models.Model):
id = models.AutoField(db_column='ID', primary_key=True) # Field name made lowercase.
name = models.CharField(db_column='Name', unique=True, max_length=255) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Data_Sizes'
def __str__(self):
return "Size: [" + self.id.__str__() + ", " + self.name + "] "
我称之为创建模板,如下所示:
def index(request):
template = loader.get_template('orders/responseTemplate.xml')
company = Company.objects.get(id=10) # remember to use `get` for a single item
order_list = company.orders.all()
tpcontext = {'orderList': order_list}
return HttpResponse(template.render(tpcontext, request))
我使用的模板文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<orders>
{% for order in orderList %}
<order id="{{ order.id }}">
<models>
{% for model in order.model_set.all %}
<model id="{{ model.id }}">
<name>{{model.model_data.name}}</name>
{% for color in model.model_color_set.all %}
<color name="'{{color.color.name}}'">
{% for size in color.modelsize_set.all %}
<sizeAmount name="'{{size.size.name}}'">{{size.amount}}</sizeAmount>
{% endfor%}
</color>
{% endfor%}
</model>
{% endfor %}
</models>
</order>
{% endfor %}
</orders>
我想做的是得到关于某个公司的信息(在本例中是身份证号为10的公司)并获得它的所有订单。在这之后,我想为每个订单获得一个模型列表。在我有了一个模型列表之后,我想在屏幕上显示模型名称,然后我想遍历与每个模型相关联的颜色列表,并将其添加到XML文件中的模型中。最后,每种颜色都有一些大小字段,这些字段应添加到各自的颜色中。我得到的输出如下:
<?xml version="1.0" encoding="UTF-8"?>
<orders>
<order id="16">
<models>
<model id="17">
<name>Pants</name>
</model>
<model id="18">
<name>Pants</name>
</model>
</models>
</order>
</orders>
如你所见,我可以得到一个模型的列表,还有模型的名字。但是,这些颜色不会出现在列表中。我已经检查了数据库中是否有信息,信息是否存在。你知道吗
我认为模板中的这行有一个错误:
{% for color in model.model_color_set.all %}
但是我不知道这个错误是什么?你知道吗
您的模型在model和ModelColor之间定义了一个ForeignKey。这意味着每个模型只有一个modelcolor。这里没有
_set
,也没有可迭代的内容;您可以按照外键获取该模型的单一颜色。您可以使用with
标记使其更易于使用。你知道吗你试过
model.modelcolor_set.all
吗? Django在将CamelCase
模型名转换为小写时不添加下划线。你知道吗Model和ModelColor之间有一对一的关系,所以使用set是没有意义的。你知道吗
看起来您可能试图访问的是ModelData模型的颜色集。你可以这样做:
相关问题 更多 >
编程相关推荐