1

我有一个“导出为 CSV”按钮,可以导出所有车型。当我将所有汽车导出为 CSV 时,“功能”(例如 AM/FM 收音机、月球车顶、皮革内饰、蓝牙、GPS 等)列显示如下:

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

我如何摆脱所有其他东西,只拥有“GPS,皮革”?

模型

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

视图.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
4

1 回答 1

4

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

替换为特征模型上的实际字段。

csv_features = ','.join([x.MY_FIELD_HERE for x in x.features.all()])
于 2012-05-04T20:47:50.550 回答