我有一个类库视图,我想自动下载一个csv文件,但似乎不知道在做什么。这是代码
Model.py
class Pv(models.Model):
accounts =(
('Sub CF','Sub CF'),
('Special','Special'),
('Directors','Directors'),
('Operations','Operations'),
('LSGDP','LSGDP'),
('DWAP','DWAP'),
('Capacity(USD)','Capacity(USD)')
)
acc =(
('Yes','Yes'),
('No', 'No')
)
source =(
('GOG','GOG'),
('Others', 'Others')
)
pv =(
('General','General'),
('Honorarium','Honorarium')
)
center=(
('Cost Center 1','Cost Center 1'),
('Cost Center 2','Cost Center 2'),
('Cost Center 3','Cost Center 3'),
('Cost Center 4','Cost Center 4'),
('Cost Center 5','Cost Center 5')
)
stat =(
('Completed','Completed'),
('Returned','Returned'),
('Cancelled','Cancelled')
)
IA_System_Code = models.AutoField(primary_key = True)
IA_code = models.CharField(max_length = 150)
Date_recieved = models.DateField()
Pv_reference = models.CharField(unique = True, max_length = 120)
Source_of_Funding = models.CharField(max_length=50, choices = source)
Cost_center = models.CharField(max_length=50, choices = center)
Payee = models.CharField(max_length=500)
Description = models.CharField(max_length = 500)
Account_code = models.CharField(max_length=350)
Gross_amount = models.DecimalField(max_digits=19, decimal_places=2)
Withholding_tax = models.DecimalField(max_digits=19, decimal_places=2)
Net_amount = models.DecimalField(max_digits=19, decimal_places=2)
Status = models.CharField(max_length = 60, choices = stat )
Remarks =models.CharField(max_length = 500, blank = True)
Acc_Impress = models.CharField(max_length = 350,choices=acc)
Date_returned =models.DateField(null=True,blank = True)
Type_of_accounts= models.CharField(max_length = 100, choices = accounts)
Type_of_pv = models.CharField(max_length = 20, choices = pv)
returned_to_chest = models.DecimalField(max_digits=19, decimal_places=2)
created = models.DateTimeField(null=True)
created_by = models.ForeignKey('auth.User', blank=True,\null=True,\
default=None,on_delete=models.CASCADE,\
related_name='create')
modified = models.DateTimeField(null=True)
modified_by = models.ForeignKey('auth.User', blank=True,null=True,\
default=None ,on_delete=models.CASCADE,\
related_name='modified')
class Meta():
ordering = ["IA_System_Code"]
def __str__(self):
return self.Description
def save(self, *args, **kwargs):
user = get_current_user()
if user and not user.pk:
user = None
if not self.pk:
self.created_by = user
self.created = datetime.now()
else:
self.modified_by = user
self.modified = datetime.now()
super(Pv, self).save(*args, **kwargs)view.py
class ReportView(ListView):
model = Pv # model been used
template_name = 'pv/report.html'
context_object_name = 'all_search_results'
def get_queryset(self):
result = super(ReportView, self).get_queryset()
query = self.request.GET.get('search') # get the search critirial from the template
today = datetime.datetime.now()
if query:
if query == "Withholding":
postresult = Pv.objects.filter(Withholding_tax__gt\
=0.00,Date_recieved__year=today.year)
elif query =="Non-Withholding":
postresult = Pv.objects.filter(Withholding_tax__lte\
=0.00, Date_recieved__year=today.year)
elif query =="Accountable-Impress":
postresult = Pv.objects.filter(Acc_Impress__exact\
='Yes',Date_recieved__year=today.year)
elif query =="Non-Accountable-Impress":
postresult = Pv.objects.filter(Acc_Impress__exact\
= 'No',Date_recieved__year=today.year)
else:
postresult = Pv.objects.all()
result = postresult
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="report.csv"'
today = datetime.datetime.now()
data = result
pvlist =data.filter(Date_recieved__year=today.year)\
.order_by('IA_System_Code')
writer = csv.writer(response)
writer.writerow(['IA_System_Code','IA_code',\
'Date_recieved','Pv_reference',\
'Source_of_Funding','Cost_center','Payee',\
'Description','Account_code',\
'Gross_amount','Withholding_tax',\
'Net_amount','Status','Acc_Impress',\
'Date_returned','Type_of_accounts','Type_of_pv'])
for pv in pvlist :
writer.writerow([pv.IA_System_Code,pv.IA_code,pv.Date_recieved,\
pv.Pv_reference,pv.Source_of_Funding,\
pv.Cost_center, pv.Payee,pv.Description,\
pv.Account_code,pv.Gross_amount,
pv.Withholding_tax,pv.Net_amount,\
pv.Status,pv.Acc_Impress,\
pv.Date_returned,pv.Type_of_accounts,\
pv.Type_of_pv])
else:
result = None
return result 看来我不知道我在做什么。显然我的代码错了。有谁能让我出去吗。我想要实现的是当人完成过滤时,csv文件应该自动生成。
编辑的这里是我的新代码
view.py
this is my coded my new code.
class ReportView(ListView):
model = Pv # model been used
template_name = 'pv/report.html'
context_object_name = 'all_search_results'
def get_queryset(self):
result = super(ReportView, self).get_queryset()
query = self.request.GET.get('search')
today = datetime.datetime.now()
if query:
if query == "Withholding":
postresult = Pv.objects.filter(Withholding_tax__gt\
=0.00,Date_recieved__year=today.year)
elif query =="Non-Withholding":
postresult = Pv.objects.filter(Withholding_tax__lte =0.00,\
Date_recieved__year=today.year)
elif query =="Accountable-Impress":
postresult = Pv.objects.filter(Acc_Impress__exact\
='Yes',Date_recieved__year=today.year)
elif query =="Non-Accountable-Impress":
postresult = Pv.objects.filter(Acc_Impress__exact =\
'No',Date_recieved__year=today.year)
else:
postresult = Pv.objects.all()
result = postresult
else:
result = None
return result
def get(self, request, *args, **kwargs):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="report.csv"'
writer = csv.writer(response)
writer.writerow(['IA_System_Code','IA_code',\
'Date_recieved','Pv_reference',
'Source_of_Funding','Cost_center','Payee',\
'Description','Account_code',\
'Gross_amount','Withholding_tax',\
'Net_amount','Status','Acc_Impress',\
'Date_returned','Type_of_accounts',\
'Type_of_pv','returned_to_chest'])
pvs = self.get_queryset()
for pv in pvs:
writer.writerow([pv.IA_System_Code,pv.IA_code,\
pv.Date_recieved,pv.Pv_reference,\
pv.Source_of_Funding,pv.Cost_center,\
pv.Payee,pv.Description,pv.Account_code,\
pv.Gross_amount,pv.Withholding_tax,\
pv.Net_amount,pv.Status,pv.Acc_Impress,\
pv.Date_returned,pv.Type_of_accounts,\
pv.Type_of_pv,pv.returned_to_chest])
return response编辑后的代码版本可以工作,但它甚至不打开模板让你过滤,它只是运行get函数。该代码是否允许在运行get函数之前进行筛选。我好像不知道我在做什么。任何帮助都可以表示感谢。
发布于 2020-01-30 16:03:55
您可能需要在PV.objects.filter()方法中返回您的模型查询集(即get_queryset之类的内容)。
然后在get方法中呈现结果:
def get(self, request, *args, **kwargs):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment;\
filename="somefilename.csv"'
writer = csv.writer(response)
for item in self.get_queryset():
writer.writerow([item.IA_System_Code, item.IA_code...])
return response还没有测试代码,但我希望它能帮上忙
编辑的
这是我的新密码。
class ReportView(ListView):
model = Pv # model been used
template_name = 'pv/report.html'
context_object_name = 'all_search_results'
def get_queryset(self):
result = super(ReportView, self).get_queryset()
query = self.request.GET.get('search')
today = datetime.datetime.now()
if query:
if query == "Withholding":
postresult = Pv.objects.filter(Withholding_tax__gt\
=0.00,Date_recieved__year=today.year)
elif query =="Non-Withholding":
postresult = Pv.objects.filter(Withholding_tax__lte =0.00,\
Date_recieved__year=today.year)
elif query =="Accountable-Impress":
postresult = Pv.objects.filter(Acc_Impress__exact\
='Yes',Date_recieved__year=today.year)
elif query =="Non-Accountable-Impress":
postresult = Pv.objects.filter(Acc_Impress__exact =\
'No',Date_recieved__year=today.year)
else:
postresult = Pv.objects.all()
result = postresult
else:
result = None
return result
def get(self, request, *args, **kwargs):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="report.csv"'
writer = csv.writer(response)
writer.writerow(['IA_System_Code','IA_code',\
'Date_recieved','Pv_reference',
'Source_of_Funding','Cost_center','Payee',\
'Description','Account_code',\
'Gross_amount','Withholding_tax',\
'Net_amount','Status','Acc_Impress',\
'Date_returned','Type_of_accounts',\
'Type_of_pv','returned_to_chest'])
pvs = self.get_queryset()
for pv in pvs:
writer.writerow([pv.IA_System_Code,pv.IA_code,\
pv.Date_recieved,pv.Pv_reference,\
pv.Source_of_Funding,pv.Cost_center,\
pv.Payee,pv.Description,pv.Account_code,\
pv.Gross_amount,pv.Withholding_tax,\
pv.Net_amount,pv.Status,pv.Acc_Impress,\
pv.Date_returned,pv.Type_of_accounts,\
pv.Type_of_pv,pv.returned_to_chest])
return response代码工作,但它甚至不打开模板为u过滤,它只是运行get函数。该代码是否允许在运行get函数之前进行筛选。
https://stackoverflow.com/questions/59989281
复制相似问题