2012-06-22 2 views
0

Я новичок в Django и стараюсь развернуть свое резюме в Интернете.Извлеките всех родителей с детьми с сортировкой детей

Вот это мои две модели:

#MODELS 
class Category(models.Model): 
    help_text = 'Category respresents a category of experience, or school experiments' 
    # Name 
    name = models.CharField(max_length=500, blank=False) 
    # ... 

    def __unicode__(self): 
     return self.name 


class Experience(models.Model): 
    help_text = 'An experience can be a skill, a school experiment etc.' 
    # ordering = ['-end_date'] 
    parent_category = models.ForeignKey(Category) 
    # Name 
    # ... 
    end_date = models.DateField('date of end', blank=True, null=True) 
    # ... 

    def __unicode__(self): 
     return self.name 

#View 
# index view 
def index(request): 
     # Would like something to just order the children 
    all_categories = Category.objects.filter().order_by(????) 
    return render_to_response('CMSCV/index.html', 
      { 'categories' : all_categories }, 
      context_instance=RequestContext(request)) 

Как вы можете видеть, на мой взгляд, я не знаю, как-то только дети (опыт) на поле «датой_окончания» в запросе.

Я попытался это:

Category.objects.all().order_by('experience__end_date').distinct()

Category.objects.all().order_by('experience__end_date').distinct('experience__end_date')

Category.objects.all().order_by('experience__end_date').distinct('name')

Но это возвращает меня слишком много родителей ...

Хотелось бы знать, как я могу решить эту проблему ?

Спасибо

ответ

0

Вы можете использовать Джанго aggregations для этого, чтобы получить максимальную END_DATE, а затем сортировать по его. Например:

from django.db.models import Max 
Category.objects.all().annotate(max_date=Max('experiences_set__end_date')).order_by('max_date') 
+0

Это не работает, на самом деле это просто указана максимальная дата опыта и сортировка по этой максимальной дате. Но я хотел бы сортировать только детей. Я не хочу сортировать Категория, но только дети. Спасибо – user1475457

+0

О, вы хотите распечатать опыт в порядке? В этом случае вы будете перебирать категории, а затем выполняете 'category.experiences_set.all(). Order_by ('end_date')' – cberner

+0

Вот и все! Спасибо огромное ! – user1475457

Смежные вопросы