我有一个“导出到CSV”按钮,导出所有车型。当我所有的汽车出口到CSV时,“特征”(如AM/FM收音机,天窗,真皮内饰,蓝牙,GPS等)列会显示如下所示:DJANGO:如何使用包含多对多字段的模型输出CSV?
[<Feature: GPS>, <Feature: Leather>]
如何摆脱所有其他的东西,只有“GPS,皮革”?
MODEL
class Features(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Car(models.Model):
model_name = models.CharField(max_length=20)
features = models.ManyToManyField(features)
def __unicode__(self):
return self.model_name
VIEW.PY
def query(request):
results = Car.objects.all()
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment;filename="car_export.csv"'
writer = csv.writer(response)
writer.writerow(['Model Name', 'Features'])
for x in results:
writer.writerow([x.model_name, x.role.all()])
return response
解答:
模型:
class Features(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Car(models.Model):
model_name = models.CharField(max_length=20)
features = models.ManyToManyField(features)
def __unicode__(self):
return self.model_name
浏览次数:
def query(request):
results = Car.objects.all()
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment;filename="car_export.csv"'
writer = csv.writer(response)
writer.writerow(['Model Name', 'Features'])
for x in results:
writer.writerow([x.model_name, ', '.join([x.name for x in x.role.all()]),])
return response
这个调用返回一个'QuerySet',这是因为你的'results'查询集..你怎么''从<汽车:日产XTERRA> model_name'完全一样'? x.model_name。同样的事情适用于你的'特点QuerySet' –
对不起,新的Django/Python和我不完全理解你的评论.. – thedeepfield