如果你问的一般,我已经添加了一个工作项目的一部分到底部。但是,在您的例子中,我相信您可以定义一个实例方法来处理选定的对象—当然,如果这些操作与模型直接相关的话。在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
然后
^{pr2}$
我上面说的代码。
在我的视图.pyfrom reports_helper import report_generator
...
def export_terminals_daily_turnover(request):
return report_generator('TerminalTurnover', 'daily_turnover', 'terminal_id', 'address_on_bill', 'summ')
这是我的报告_助手.pyimport 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
顺便说一句,我所指的模型是一个db视图,而不是一个表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'