创建 Django 查询集以访问整个数据库
Creating Django Query Sets to Access Entire Database
更新 我意识到我下面的解释有点隐藏了我真正的问题是什么。最终我想要完成的是创建一个 dashboard.html 模板并能够从我的流量和电子邮件模型中呈现 access/data。
我正在使用 Django 1.8.3 和 Python 3.4.3
我正在构建一个软件,它将接受输入的值并将它们显示在视图中 - 很简单。目前我有两个 models/views 带有单独的模板来查看数据。这按预期工作。
我还在创建一个仪表板,它应该从我的两个模型中提取数据,这就是让我悲伤的部分,试图让我的思绪环绕。我阅读了很多关于查询集的内容,但找不到关于如何在我的项目中实施我完全理解的示例。
让您了解渲染的内容;此数据是从 Google Analytics 导出的表格数据,转换为 csv,然后从 Django 管理导入到应用程序中。这个想法是能够使用 'for' 循环将数据作为列表查看,这很有效,仪表板能够制作计算数据的可视化图表。
如有任何帮助,我们将不胜感激。我不确定您需要多少信息,所以我会在下面尽可能多地提供信息。谢谢。
models.py
from django.db import models
class Traffic(models.Model):
date = models.DateField()
traffic = models.PositiveIntegerField(null=True)
ifs_signups = models.IntegerField(null=True)
campaigns = models.IntegerField(null=True)
sales = models.PositiveIntegerField(null=True)
def month(self):
return self.date.strftime("%B")
def quarter(self):
item = self.date.strftime("%B")
q1 = (["January", "February", "March"])
q2 = (["April", "May", "June"])
q3 = (["July", "August", "September"])
q4 = (["October", "November", "December"])
if item in q1:
return "1st Quarter"
elif item in q2:
return "2nd Quarter"
elif item in q3:
return "3rd Quarter"
elif item in q4:
return "4th Quarter"
else:
return "No Date Specified"
def conversions(self):
conversion = self.sales / self.traffic
return "%r" % conversion
class Email(models.Model):
date = models.DateField()
subject = models.CharField(max_length=255)
day_of_week = models.CharField(max_length=255)
subject_type = models.CharField(max_length=255)
content_type = models.CharField(max_length=255)
email_list = models.CharField(max_length=255)
recipients = models.PositiveIntegerField(null=True)
unsubscribes = models.PositiveIntegerField(null=True)
bounces = models.PositiveIntegerField(null=True)
open = models.PositiveIntegerField(null=True)
clicks = models.PositiveIntegerField(null=True)
def month(self):
return self.date.strftime("%B")
def open_rate(self):
open_rate = self.open / self.recipients
return "%r" % open_rate
def click_through_rate(self):
click_through_rate = self.clicks / self.open
return "%r" % click_through_rate
views.py
from django.shortcuts import render, redirect
from django.views.generic import ListView
from .models import Traffic
from .models import Email
class TrafficListView(ListView):
model = Traffic
template_name = 'dashboard/pages/traffic.html'
def get_context_data(self, **kwargs):
context = super(TrafficListView, self).get_context_data(**kwargs)
return context
class EmailListView(ListView):
model = Email
template_name = 'dashboard/pages/email.html'
def get_context_data(self, **kwargs):
context = super(EmailListView, self).get_context_data(**kwargs)
return context
我建议脱离 ListView 并实现您自己的简单 TemplateView。
from myapp.models import Traffic, Email
class DashboardView(TemplateView):
template_name = "dashboard/pages/dashboard.html"
def get_context_data(self, **kwargs):
context = super(DashboardView, self).get_context_data(**kwargs)
context['email_list'] = Email.objects.all()
context['traffic_list'] = Traffic.objects.all()
return context
更新 我意识到我下面的解释有点隐藏了我真正的问题是什么。最终我想要完成的是创建一个 dashboard.html 模板并能够从我的流量和电子邮件模型中呈现 access/data。
我正在使用 Django 1.8.3 和 Python 3.4.3
我正在构建一个软件,它将接受输入的值并将它们显示在视图中 - 很简单。目前我有两个 models/views 带有单独的模板来查看数据。这按预期工作。
我还在创建一个仪表板,它应该从我的两个模型中提取数据,这就是让我悲伤的部分,试图让我的思绪环绕。我阅读了很多关于查询集的内容,但找不到关于如何在我的项目中实施我完全理解的示例。
让您了解渲染的内容;此数据是从 Google Analytics 导出的表格数据,转换为 csv,然后从 Django 管理导入到应用程序中。这个想法是能够使用 'for' 循环将数据作为列表查看,这很有效,仪表板能够制作计算数据的可视化图表。
如有任何帮助,我们将不胜感激。我不确定您需要多少信息,所以我会在下面尽可能多地提供信息。谢谢。
models.py
from django.db import models
class Traffic(models.Model):
date = models.DateField()
traffic = models.PositiveIntegerField(null=True)
ifs_signups = models.IntegerField(null=True)
campaigns = models.IntegerField(null=True)
sales = models.PositiveIntegerField(null=True)
def month(self):
return self.date.strftime("%B")
def quarter(self):
item = self.date.strftime("%B")
q1 = (["January", "February", "March"])
q2 = (["April", "May", "June"])
q3 = (["July", "August", "September"])
q4 = (["October", "November", "December"])
if item in q1:
return "1st Quarter"
elif item in q2:
return "2nd Quarter"
elif item in q3:
return "3rd Quarter"
elif item in q4:
return "4th Quarter"
else:
return "No Date Specified"
def conversions(self):
conversion = self.sales / self.traffic
return "%r" % conversion
class Email(models.Model):
date = models.DateField()
subject = models.CharField(max_length=255)
day_of_week = models.CharField(max_length=255)
subject_type = models.CharField(max_length=255)
content_type = models.CharField(max_length=255)
email_list = models.CharField(max_length=255)
recipients = models.PositiveIntegerField(null=True)
unsubscribes = models.PositiveIntegerField(null=True)
bounces = models.PositiveIntegerField(null=True)
open = models.PositiveIntegerField(null=True)
clicks = models.PositiveIntegerField(null=True)
def month(self):
return self.date.strftime("%B")
def open_rate(self):
open_rate = self.open / self.recipients
return "%r" % open_rate
def click_through_rate(self):
click_through_rate = self.clicks / self.open
return "%r" % click_through_rate
views.py
from django.shortcuts import render, redirect
from django.views.generic import ListView
from .models import Traffic
from .models import Email
class TrafficListView(ListView):
model = Traffic
template_name = 'dashboard/pages/traffic.html'
def get_context_data(self, **kwargs):
context = super(TrafficListView, self).get_context_data(**kwargs)
return context
class EmailListView(ListView):
model = Email
template_name = 'dashboard/pages/email.html'
def get_context_data(self, **kwargs):
context = super(EmailListView, self).get_context_data(**kwargs)
return context
我建议脱离 ListView 并实现您自己的简单 TemplateView。
from myapp.models import Traffic, Email
class DashboardView(TemplateView):
template_name = "dashboard/pages/dashboard.html"
def get_context_data(self, **kwargs):
context = super(DashboardView, self).get_context_data(**kwargs)
context['email_list'] = Email.objects.all()
context['traffic_list'] = Traffic.objects.all()
return context