Django 주석의 관련 항목을 필터링 할 수 있습니까?
-
18-09-2019 - |
문제
다음 두 가지 모델이 있습니다.
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 일 동안 만들어진 작업 만 계산하고 싶다는 것입니다. 그러나 자격을 갖춘 작업이있는 범주뿐만 아니라 모든 카테고리를 반환하고 싶습니다.
해결책 2
나는 이것에 다르게 접근하기로 결정했고 주석을 전혀 사용하지 않기로 결정했습니다. 작업 모델에 관리자를 추가하여 활성 (30 일 이하) 작업 만 반환하고 인스턴스의 작업 수에 대해 쿼리 된 작업 범주 모델에 속성을 만들었습니다. 내 템플릿 태그는 단순히 모든 카테고리를 반환했습니다. 다음은 관련 코드입니다.
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}
다른 팁
단지 추측 ...하지만 이것이 효과가 있습니까?
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}
보다"조회-그 스팬 관계"스패닝 쿼리에 대한 자세한 내용은 모든 카테고리를 얻으려면 다른 쿼리가 필요할 것입니다 ...
제휴하지 않습니다 StackOverflow