如果您是一般性地询问,我已将一个工作项目中的一部分添加到底部。但是,在您的情况下,我相信您可以定义一个实例方法来处理选定的对象——当然,如果这些操作与模型直接相关。
class User(models.Model):
first_name = models.CharField(max_length=40)
last_name = models.CharField(max_length=40)
title = models.CharField(max_length = 50)
...
def make_comrade(self):
return "Comrade " + self.last_name
那么,
user = User.objects.get(pk=1)
user.update(title=user.make_comrade())
我上面说过的代码。
在我的 views.py
中
from reports_helper import report_generator
...
def export_terminals_daily_turnover(request):
return report_generator('TerminalTurnover', 'daily_turnover', 'terminal_id', 'address_on_bill', 'summ')
这是我的 reports_helper.py
import csv
import django
from django.http import HttpResponse
def get_model_name(model_name):
entity = django.apps.apps.get_model('reports', model_name)
return entity
def report_generator(model_name, report_name, *args):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="{}.csv"'.format(report_name)
headers = list(args)
klass = get_model_name(model_name)
writer = csv.writer(response)
writer.writerow(headers)
rows = klass.objects.all().values_list(*args)
for row in rows:
writer.writerow(row)
return response
顺便说一句,我这里指的模型是一个数据库视图而不是一个表
class TerminalTurnover(models.Model):
terminal_id = models.IntegerField(primary_key=True)
summ = models.DecimalField(max_digits=15, decimal_places=2)
address_on_bill = models.CharField(max_length=100)
class Meta:
managed = False
db_table = 'reports_terminalturnover'