我目前正在Django做一个小项目。我的想法是我有一个主管和项目的模型,主管模型包含诸如姓名,电子邮件等的详细信息。项目模型包含主题,描述,发布日期和截止日期等。
class Supervisor(models.Model):
first_name = models.CharField(max_length=64)
last_name = models.CharField(max_length=64)
email = models.CharField(max_length=128)
class Project(models.Model):
supervisor = models.ForeignKey(Supervisor, on_delete=models.SET_NULL, blank=True, null=True)
name = models.CharField(max_length=64)
pub_date = models.DateField(auto_now_add=True)
deadline = models.DateField(blank=True, null=True)
我想获得一个项目最多的主管名单,最终只计算不超过截止日期的项目(活动项目)。这与项目列表的视图相同。
到目前为止我所拥有的是:
class IndexView(generic.ListView):
model = Project
template_name = 'index.html'
def get_queryset(self):
return Project.objects.order_by('-pub_date')
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context['supervisor_list'] = Supervisor.objects.annotate(num_projects=Count('Project')).order_by('-num_projects')[0:5]
return context
我收到FieldError,说它无法解析关键字' Project'。
答案 0 :(得分:3)
将Count('project')
更改为from django.utils import timezone
supervisors = Supervisor.objects \
.filter(project__deadline__gte=timezone.now()) \
.annotate(num_projects=Count('project')) \
.order_by('-num_projects')[:5]
将解决您获得的异常。
要获得活跃项目的前5名主管,请按项目截止日期添加过滤器:
chgrp -Rv apache /usr/share/ampache/www/config/ampache.cfg.php
chmod g=rwx -R /usr/share/ampache/www/config/ampache.cfg.php