2012-05-04 17 views
1

私は、すべての車種をエクスポートする「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 

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 
+0

? x.model_name。あなたの 'Features QuerySet'にも全く同じことが当てはまります –

+0

django/pythonの初心者です。 – thedeepfield

答えて

2

はあなたがfeaturesモデルで印刷したいのか、フィールドに依存...あなたはM2Mマネージャーを見ている - それは、クエリセットのインタフェースを返しますヘルパーです。関連するすべての機能が必要な場合は、x.features.all()

フィーチャーモデルの実際のフィールドに置き換えてください。 <:日産エクステラの車> `あなたが` results`クエリセット..どのようにあなたが ``からMODEL_NAME`を得るのですかとまったく同じである `QuerySet`、リターンを呼び出す

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

あなたはどこにcsv_features = '、'などを入れればいいですか? x.features.allの代わりにそれを置く? – thedeepfield

+0

は私の問題をよりよく反映するために質問を編集しました。 – thedeepfield

+0

私は少し変更を加えました(問題の答えを見てください)が、あなたの答えが働いてくれてありがとう! – thedeepfield

関連する問題