1. ホーム
  2. python

Django のモデルフォームの必須フィールド

2023-09-18 12:17:08

質問

あるフォームで、いくつかのフィールドが、必要でないにもかかわらず、必須項目として表示されています。以下はmodels.pyのフォームです。

class CircuitForm(ModelForm):
    class Meta:
        model = Circuit
        exclude = ('lastPaged',)
    def __init__(self, *args, **kwargs):
        super(CircuitForm, self).__init__(*args, **kwargs)
        self.fields['begin'].widget = widgets.AdminSplitDateTime()
        self.fields['end'].widget = widgets.AdminSplitDateTime()

実際のCircuitモデルでは、このようにフィールドが定義されています。

begin = models.DateTimeField('Start Time', null=True, blank=True)
end = models.DateTimeField('Stop Time', null=True, blank=True)

このためのviews.pyはこちらです。

def addCircuitForm(request):
    if request.method == 'POST':
        form = CircuitForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/sla/all')
    form = CircuitForm()    
    return render_to_response('sla/add.html', {'form': form})

2つのフィールドが必須でないようにするにはどうしたらよいですか?

どのように解決するのですか?

モデル内のフィールドの空白設定を変更したくない場合 (変更すると管理サイトの正常なバリデーションが壊れる)、Form クラスで次のようにします。

def __init__(self, *args, **kwargs):
    super(CircuitForm, self).__init__(*args, **kwargs)

    for key in self.fields:
        self.fields[key].required = False 

再定義されたコンストラクタは、どのような機能にも害を与えません。