簡體   English   中英

如果在Django表單中選中了另一個字段,則需要填寫一個字段

[英]Make a field required if another field is checked in Django form

我有這樣的模型:

class News(models.Model):
    is_activity = models.BooleanField(default=False)
    activity_name = models.CharField(max_length=240, blank=True, null=True)

我想要實現的是,如果檢查了is_activity ,我希望activity_name是必需的。 因此,我試圖覆蓋__init__方法:

class NewsForm(forms.ModelForm):
    class Meta:
        model = News

    def __init__(self, *args, **kwargs):
        super(NewsForm, self).__init__(*args, **kwargs)
        if self.fields['is_activity'] is True:
            self.fields['activity_name'].required = True


class NewsAdmin(FrontendEditableAdminMixin, admin.ModelAdmin):
    form = NewsForm

即使我簽入了is_activity ,也不需要activity_name 怎么了?

ModelForm.clean()方法使您可以訪問已清理的數據 - 您可以在此處包含特定於字段的條件邏輯:

from django.core.validators import EMPTY_VALUES

class NewsForm(forms.ModelForm):
    class Meta:
        model = News

    def clean(self):
        is_activity = self.cleaned_data.get('is_activity', False)
        if is_activity:
            # validate the activity name
            activity_name = self.cleaned_data.get('activity_name', None)
            if activity_name in EMPTY_VALUES:
                self._errors['activity_name'] = self.error_class([
                    'Activity message required here'])
        return self.cleaned_data

class NewsAdmin(FrontendEditableAdminMixin, admin.ModelAdmin):
    form = NewsForm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM