4

特定のユーザーの models.py の情報を次の csv 関数に入力する方法について、少し混乱しています。誰かが私を正しい方向に向けることができますか? 別の py ファイルで情報を処理する必要がありますか、それとも自分のビューで処理できますか?

情報をダウンロードする私の見解

def download(request):
    response = HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; filename=UserData.csv'
    writer = csv.writer(response)
    writer.writerow(['Date', 'HighBGL', 'LowBGL', 'Diet', 'Weight', 'Height', 'Etc'])
    writer.writerow(['Info pertaining to date 1'])
    writer.writerow(['info pertaining to date 2'])
    return response

保存に興味があるモデルの 1 人

class DailyVital(models.Model):
    user =  models.ForeignKey(User)
    entered_at = models.DateTimeField()
    high_BGL = models.IntegerField()
    low_BGL = models.IntegerField()
    height = models.IntegerField(blank = True, null = True)
    weight = models.IntegerField(blank = True, null = True)
4

2 に答える 2

1

最初に、次のような django モデルをクエリする必要がありますDailyVital.objects.all()DailyVital.objects.filter(user=request.user)

次に、オブジェクトを手動でタプルに変換するか、 DjangoQuerySetvalues_listメソッドをフィールド名のリストとともに使用して、オブジェクトの代わりにタプルを返すことができます。何かのようなもの:

def download(request):
    response = HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; filename=UserData.csv'
    writer = csv.writer(response)
    writer.writerow(['Date', 'HighBGL', 'LowBGL', 'Weight', 'Height'])
    query = DailyVital.objects.filter(user=request.user)
    for row in query.values_list('entered_at', 'high_BGL', 'low_BGL', 'weight', 'height'):
       writer.writerow(row)
    return response

Django で必要ない場合は、sqlite3コマンド ライン プログラムの-csvオプションを検討することもできます。

于 2012-08-23T02:31:42.203 に答える
0

これを行う簡単な方法は、モデルをリストのリストに変換することです。

まず、関数を一覧表示するオブジェクトが必要です。

def object2list(obj, attr_list):
    " returns values (or None) for the object's attributes in attr_list"
    return [getattr(obj, attr, None) for attr in attr_list]

次に、それをリスト内包表記でcsvwriterに渡すだけです(list_of_objectsクエリしたものがある場合)

attr_list = ['date', 'high_BGL', 'low_BGL', 'diet', 'weight', 'height']

writer.writerows([object2list(obj, attr_list) for obj in list_of_objects])
于 2012-08-23T02:18:43.520 に答える