Python 是否可以在Django注释中筛选相关项?
我有以下两种型号:Python 是否可以在Django注释中筛选相关项?,python,django,annotations,django-queryset,Python,Django,Annotations,Django Queryset,我有以下两种型号: class Job(models.Model): title = models.CharField(_('title'), max_length=50) description = models.TextField(_('description')) category = models.ForeignKey(JobCategory, related_name='jobs') created_date = models.DateTimeField
class Job(models.Model):
title = models.CharField(_('title'), max_length=50)
description = models.TextField(_('description'))
category = models.ForeignKey(JobCategory, related_name='jobs')
created_date = models.DateTimeField(auto_now_add=True)
class JobCategory(models.Model):
title = models.CharField(_('title'), max_length=50)
slug = models.SlugField(_('slug'))
到目前为止,我的问题是:
def job_categories():
categories = JobCategory.objects.annotate(num_postings=Count('jobs'))
return {'categories': categories}
问题是,我只想计算过去30天创造的就业机会。然而,我想返回所有类别,而不仅仅是那些有合格工作的类别。只是一个猜测。。。但这行得通吗
def job_categories():
thritydaysago = datetime.datetime.now() - datetime.timedelta(days=30)
categories = JobCategory.objects.filter(job__created_date__gte=thritydaysago).annotate(num_postings=Count('jobs'))
return {'categories': categories}
有关跨查询的更多详细信息,请参见“”。
六羟甲基三聚氰胺六甲醚。。。可能需要另一个查询才能获取所有类别…只是一个猜测。。。但这行得通吗
def job_categories():
thritydaysago = datetime.datetime.now() - datetime.timedelta(days=30)
categories = JobCategory.objects.filter(job__created_date__gte=thritydaysago).annotate(num_postings=Count('jobs'))
return {'categories': categories}
有关跨查询的更多详细信息,请参见“”。
六羟甲基三聚氰胺六甲醚。。。可能需要另一个查询来获取所有类别…我决定以不同的方式处理此问题,并选择根本不使用注释。我向作业模型添加了一个只返回活动(30天或更短时间)作业的管理器,并在JobCategory模型上创建了一个属性,用于查询实例的作业计数。我的templatetag只返回所有类别。这是相关代码
class JobCategory(models.Model):
title = models.CharField(_('title'), max_length=50, help_text=_("Max 50 chars. Required."))
slug = models.SlugField(_('slug'), help_text=_("Only letters, numbers, or hyphens. Required."))
class Meta:
verbose_name = _('job category')
verbose_name_plural = _('job categories')
def __unicode__(self):
return self.title
def get_absolute_url(self):
return reverse('djobs_category_jobs', args=[self.slug])
@property
def active_job_count(self):
return len(Job.active.filter(category=self))
class ActiveJobManager(models.Manager):
def get_query_set(self):
return super(ActiveJobManager, self).get_query_set().filter(created_date__gte=datetime.datetime.now() - datetime.timedelta(days=30))
class Job(models.Model):
title = models.CharField(_('title'), max_length=50, help_text=_("Max 50 chars. Required."))
description = models.TextField(_('description'), help_text=_("Required."))
category = models.ForeignKey(JobCategory, related_name='jobs')
employment_type = models.CharField(_('employment type'), max_length=5, choices=EMPLOYMENT_TYPE_CHOICES, help_text=_("Required."))
employment_level = models.CharField(_('employment level'), max_length=5, choices=EMPLOYMENT_LEVEL_CHOICES, help_text=_("Required."))
employer = models.ForeignKey(Employer)
location = models.ForeignKey(Location)
contact = models.ForeignKey(Contact)
allow_applications = models.BooleanField(_('allow applications'))
created_date = models.DateTimeField(auto_now_add=True)
objects = models.Manager()
active = ActiveJobManager()
class Meta:
verbose_name = _('job')
verbose_name_plural = _('jobs')
def __unicode__(self):
return '%s at %s' % (self.title, self.employer.name)
还有标签
def job_categories():
categories = JobCategory.objects.all()
return {'categories': categories}
我决定以不同的方式处理这个问题,并选择根本不使用注释。我向作业模型添加了一个只返回活动(30天或更短时间)作业的管理器,并在JobCategory模型上创建了一个属性,用于查询实例的作业计数。我的templatetag只返回所有类别。这是相关代码
class JobCategory(models.Model):
title = models.CharField(_('title'), max_length=50, help_text=_("Max 50 chars. Required."))
slug = models.SlugField(_('slug'), help_text=_("Only letters, numbers, or hyphens. Required."))
class Meta:
verbose_name = _('job category')
verbose_name_plural = _('job categories')
def __unicode__(self):
return self.title
def get_absolute_url(self):
return reverse('djobs_category_jobs', args=[self.slug])
@property
def active_job_count(self):
return len(Job.active.filter(category=self))
class ActiveJobManager(models.Manager):
def get_query_set(self):
return super(ActiveJobManager, self).get_query_set().filter(created_date__gte=datetime.datetime.now() - datetime.timedelta(days=30))
class Job(models.Model):
title = models.CharField(_('title'), max_length=50, help_text=_("Max 50 chars. Required."))
description = models.TextField(_('description'), help_text=_("Required."))
category = models.ForeignKey(JobCategory, related_name='jobs')
employment_type = models.CharField(_('employment type'), max_length=5, choices=EMPLOYMENT_TYPE_CHOICES, help_text=_("Required."))
employment_level = models.CharField(_('employment level'), max_length=5, choices=EMPLOYMENT_LEVEL_CHOICES, help_text=_("Required."))
employer = models.ForeignKey(Employer)
location = models.ForeignKey(Location)
contact = models.ForeignKey(Contact)
allow_applications = models.BooleanField(_('allow applications'))
created_date = models.DateTimeField(auto_now_add=True)
objects = models.Manager()
active = ActiveJobManager()
class Meta:
verbose_name = _('job')
verbose_name_plural = _('jobs')
def __unicode__(self):
return '%s at %s' % (self.title, self.employer.name)
还有标签
def job_categories():
categories = JobCategory.objects.all()
return {'categories': categories}
这将仅返回在过去30天内创建了作业的类别。我还试图避免返回多个查询集,因为这违背了使用注释的目的。这个函数实际上是作为一个templatetag存在的,我希望在模板层,将计数包含在每个类别中(即使计数为0)。谢谢。是的,我想你只需要执行两个查询。这将只返回在过去30天内创建了工作的类别。我还试图避免返回多个查询集,因为这违背了使用注释的目的。这个函数实际上是作为一个templatetag存在的,我希望在模板层,将计数包含在每个类别中(即使计数为0)。谢谢你。是的,我想你只需要执行两个查询。