0

一連のオブジェクトが与えられたので、それらを分割して、並べ替えられた、表示しやすいテーブル ビューにしようとしています。このテーブル ビューは、一般的な (つまり、日付のない) カレンダーとして機能します。

def view_working_hours(request, user_id):
""" 
Shows the working hours for a certain user. 
This generates seven sorted lists which are then passed to the generic template

"""
wh0 = list(WorkingHours.objects.filter(user__id=user_id, DOW=0))
wh1 = list(WorkingHours.objects.filter(user__id=user_id, DOW=1))
wh2 = list(WorkingHours.objects.filter(user__id=user_id, DOW=2))
wh3 = list(WorkingHours.objects.filter(user__id=user_id, DOW=3))
wh4 = list(WorkingHours.objects.filter(user__id=user_id, DOW=4))
wh5 = list(WorkingHours.objects.filter(user__id=user_id, DOW=5))
wh6 = list(WorkingHours.objects.filter(user__id=user_id, DOW=6))
wh0.sort(key = lambda x: x.startHours)
wh1.sort(key = lambda x: x.startHours)
wh2.sort(key = lambda x: x.startHours)
wh3.sort(key = lambda x: x.startHours)
wh4.sort(key = lambda x: x.startHours)
wh5.sort(key = lambda x: x.startHours)
wh6.sort(key = lambda x: x.startHours)
return render_to_response('homesite/show_schedule.html', 
                          {'wh0': wh0, 'wh1': wh1, 'wh2': wh2, 'wh3': wh3, 'wh4': wh4, 'wh5': wh5, 'wh6': wh6,}, 
                          context_instance=RequestContext(request))

変数はforeach、テンプレートのテーブル列で反復処理されます。

これは本当にエレガントではないようです。私の本能は正しいですか?

4

2 に答える 2

2

7 つのリストは必要ないと思います。DOW と開始時間で並べ替えて、ユーザーのすべてのオブジェクトを一度に取得する必要があります。

WorkingHours.objects.filter(user_id=user_id).order_by('DOW', 'startHours')

これをテンプレートに渡します。そこで、おそらくifchangedまたはregroupフィルターを使用して、数日でそれらを出力することで、単純に繰り返すことができます。

于 2012-11-23T19:14:20.133 に答える
1

次のアプローチの使用を検討できます。

def view_working_hours(request, user_id):
    """ 
    Shows the working hours for a certain user. 
    This generates seven sorted lists which are then passed to the generic template

    """

    result = {}
    for i in xrange(7):
        result["wh"+str(i)] = sorted(
            list(WorkingHours.objects.filter(user__id=user_id, DOW=i)),
            key=lambda x:x.startHours)

    return render_to_response('homesite/show_schedule.html', result,
                              context_instance=RequestContext(request))
于 2012-11-23T17:48:58.250 に答える