1

すべての車種をエクスポートする「CSV にエクスポート」ボタンがあります。すべての車を CSV にエクスポートすると、「機能」(AM/FM ラジオ、ムーン ルーフ、レザー インテリア、Bluetooth、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

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
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 に答える