DJANGOを触り続けて、約一カ月たち
ようやくフォームを使った処理を書けるようになりました。
ガントチャートをセレクタでフィルタリング処理を書いています。
form入力後の条件分岐が、構造プログラマの
悪習でif文続きになってしまい、どうもすっきりしません
もう少しスマートに書く方法は、ないものでしょうか?
if title == "" and action=="" and order != "None": target = Schedules.objects.all().order_by(order)[:100] elif order != "None": target = Schedules.objects.filter(Q(title=title)|Q(action=action)).order_by(order) else: target = Schedules.objects.filter(Q(title=title)|Q(action=action))
python
1 2 3class Chartconfig(forms.Form): 4 title = ModelChoiceField( 5 queryset = Schedules.objects.all().values_list("title",flat=True).distinct(), 6 label='item', to_field_name="title", required=False) 7 8 action = ModelChoiceField( 9 queryset = Schedules.objects.all().values_list("action",flat=True).distinct(), 10 label='action', to_field_name="action", required=False) 11 12 order = forms.ChoiceField( 13 choices = ( 14 ('None', 'なし'), 15 ('start_plan', '予定'), 16 ('start_plan', '実績'), 17), 18 label = "Sort",required= True) 19 20 21def Gantchart(request): 22 results = {} 23 ret = '' 24 25 if request.method == 'POST': 26 ret = 'OK' 27 form = Chartconfig(request.POST) 28 is_valid = form.is_valid() 29 30 title = form.data["title"] 31 action = form.data["action"] 32 order = form.data["order"] 33 34 if title == "" and action=="" and order != "None": 35 target = Schedules.objects.all().order_by(order)[:100] 36 elif order != "None": 37 target = Schedules.objects.filter(Q(title=title)|Q(action=action)).order_by(order) 38 else: 39 target = Schedules.objects.filter(Q(title=title)|Q(action=action)) 40 41 else: 42 target = Schedules.objects.all()[:100] 43 form = Chartconfig() 44 45 context = {'form': form} 46 context.update(csrf(request)) 47 context.update({'context': gt.markdown(target)}) 48 return TemplateResponse(request, 'faispc/gantchart.html', context = context)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/02 21:38