هل من الممكن التصفية في عنصر ذي صلة في التعليقات التوضيحية Django؟

StackOverflow https://stackoverflow.com/questions/1292081

سؤال

لدي النماذج 2 التالية:

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}

المشكلة هي أنني أريد فقط حساب الوظائف التي تم إنشاؤها في الثلاثين يوما الماضية. أريد إرجاع جميع الفئات ولكن ليس فقط تلك الفئات التي لديها وظائف مؤهلة.

هل كانت مفيدة؟

المحلول 2

قررت التعامل مع هذا بشكل مختلف واختار عدم استخدام التعليقات التوضيحية على الإطلاق. أضفت مديرا إلى نموذج الوظيفة الذي عاد فرص عمل نشطة (30 يوما أو أقل من العمر)، وقم بإنشاء خاصية على طراز الوظيفة التي تساءل عن عدد المهام المثلية. تعاد بلدي 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}

نصائح أخرى

مجرد تخمين ... ولكن هل هذا العمل؟

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}

يرى"البحث - تلك المرتبة"لمزيد من التفاصيل حول الاستعلامات الممتمية. هممم ... ربما تحتاج إلى استفسار آخر هناك للحصول على جميع الفئات ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top