@royalkaden (やすなが)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

djangoのformについて(プルダウン)

Djangoで知人を管理するシステムを作っています。
form画面で誕生日を入力する欄についての質問です。
月を入力した際、月によって30日まで選択可能にするか31日までに選択可能にするかを制限したいです。
このような場合はjava scriptなどを使った方が良いのでしょうか?それともdjanogを利用してできるものなのでしょうか?自分で調べたのですがしっくりくる方法が見つからず質問させていただくことにしました。

以下が実際のform画面です
スクリーンショット 2021-07-29 163820.png

view.py
def human_new(request):
    form = HumanCreateFrom(request.POST or None)
    # is_validはバリケードするメソッド
    if form.is_valid():
        Person = humanList()
        Person.name = form.cleaned_data['name']
        Person.age = form.cleaned_data['age']
        Person.part = form.cleaned_data['part']
        Person.belongs = form.cleaned_data['belongs']
        Person.encounter = form.cleaned_data['encounter']
        Person.station = form.cleaned_data['station']
        Person.month = form.cleaned_data['month']
        Person.days = form.cleaned_data['days']
        Person.like = form.cleaned_data['like']
        Person.hate = form.cleaned_data['hate']
        Person.ep = form.cleaned_data['ep']
        # Person. = form.cleaned_data['']

        humanList.objects.create(
            name=Person.name,
            age = Person.age,
            part = Person.part,
            belongs = Person.belongs,
            encounter = Person.encounter,
            station = Person.station,
            month = Person.month,
            days = Person.days,
            like = Person.like,
            hate = Person.hate,
            ep = Person.ep
        )
        return redirect('list')
    return render(request,'create.html',{'form':form})

forms.py
class HumanCreateFrom(forms.Form):

    #名前
    name = forms.CharField(
            required=True,
    )
    #年齢
    age = forms.IntegerField(
            required=True,
    )
    #アルバイト先
    part = forms.CharField(
            required=False,
    )
    #勤め先
    belongs = forms.CharField(
            required=False,
    )
    #出会い
    encounter = forms.ChoiceField(
            required=True,
            widget=forms.widgets.Select,
            choices= CATEGORY
    )
    #最寄り駅
    station = forms.CharField(
            required=False,

    )

    month = forms.ChoiceField(
            choices = YEAER_MONTH,
            required=True,
    )

    days = forms.ChoiceField(
            required=False,
            choices = DAY,
    )
    #好きなもの
    like = forms.CharField(
            required=False,

    )
    #嫌いなもの
    hate = forms.CharField(
            required=False,
    )
    #エピソード
    ep = forms.CharField(
            required=False,

    )
DAY =           ((1,1),
                (2,2),
                (3,3),
                (4,4),
                (5,5),
                (6,6),
                (7,7),
                (8,8),
                (9,9),
                (10,10),
                (11,11),
                (12,12),
                (13,13),
                (14,14),
                (15,15),
                (16,16),
                (17,17),
                (18,18),
                (19,19),
                (20,20),
                (21,21),
                (22,22),
                (23,23),
                (24,24),
                (25,25),
                (26,26),
                (27,27),
                (28,28),
                (29,29),
                (30,30),
                (31,31),
                )

DAY2 = DAY =   ((1,1),
                (2,2),
                (3,3),
                (4,4),
                (5,5),
                (6,6),
                (7,7),
                (8,8),
                (9,9),
                (10,10),
                (11,11),
                (12,12),
                (13,13),
                (14,14),
                (15,15),
                (16,16),
                (17,17),
                (18,18),
                (19,19),
                (20,20),
                (21,21),
                (22,22),
                (23,23),
                (24,24),
                (25,25),
                (26,26),
                (27,27),
                (28,28),
                (29,29),
                (30,30),
                )

0 likes

1Answer

「月」を選択する毎にページの遷移を行えば、サーバ側のコード(Python)だけでも可能でしょう。
とはいえ、それでは、あまり実用的ではないですよね。
ページの遷移を伴わずに制限を加えたい(動的に挙動を制御したい)のでしたら、Javascriptなどのクライアント側のコードが必要になると思います。

1Like

Comments

  1. @royalkaden

    Questioner

    ありがとうございます!Javascriptでやります!

Your answer might help someone💌