0

私は Django を初めて使用し、履歴書をオンラインで作成しようとしています。

ここに私の2つのモデルがあります:

#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) )

私の見解でわかるように、クエリのフィールド「end_date」で子供 (エクスペリエンス) のみを並べ替える方法がわかりません。

私はこれを試しました:

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' )

しかし、それはあまりにも多くの親を返します...

どうすれば解決できるか知りたいですか?

ありがとうございました

4

1 に答える 1

0

これにDjango の集計を使用して最大 end_date を取得し、それを並べ替えることができます。例えば:

from django.db.models import Max
Category.objects.all().annotate(max_date=Max('experiences_set__end_date')).order_by('max_date')
于 2012-06-22T17:11:14.240 に答える