DJANGO:如何使用包含多对多字段的模型输出CSV? [英] DJANGO: How to Output CSV with model containing many-to-many field?

查看:242
本文介绍了DJANGO:如何使用包含多对多字段的模型输出CSV?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个导出到CSV按钮,导出所有汽车模型。当我将所有汽车导出为CSV时,功能(例如AM / FM收音机,月亮屋顶,皮革内饰,蓝牙,GPS等)栏显示如下:

  [< Feature:GPS>,< Feature:Leather>] 


b $ b

如何摆脱所有其他的东西,只有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 ='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






ANSWER:



MODELS:

  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 = .objects.all()
response = HttpResponse(mimetype ='text / csv')
response ['Content-Disposition'] ='attachment; filename =car_export.csv'

writer.writerow(['Model Name','Features'])
在结果中的x:
writer.writerow([x.model_name, ,'.join([x.name for x in x.role.all()]),])
返回响应


解决方案

取决于您要在功能模型中打印的字段...您正在查看在m2m管理器 - 它是一个帮助器,返回一个查询集接口。如果你想要所有相关的功能,你想调用 x.features.all()



  csv_features =','。join([x.MY_FIELD_HERE for x in x.features .all()])


I have an "Export to CSV" button that exports all car models. When I export all cars into CSV, the "features" (e.g. AM/FM Radio, Moon Roof, Leather Interior, Bluetooth, GPS etc..) column displays as the following:

[<Feature: GPS>, <Feature: Leather>]

How do I get rid of all that other stuff, and just have "GPS, Leather"?

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


ANSWER:

MODELS:

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

VIEWS:

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

解决方案

Depends on what field you want to print in the features model... You are looking at an m2m manager - it's a helper that returns a queryset interface. If you want all related features, you'd want to call x.features.all()

Replace with your actual field on the features model.

csv_features = ','.join([x.MY_FIELD_HERE for x in x.features.all()])

这篇关于DJANGO:如何使用包含多对多字段的模型输出CSV?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆