Maddie Graham
Maddie Graham

Reputation: 2177

The form in which the Boolean Field field must always be true. Django

I am trying to add a restriction so that the user always selects the checkbox to 'True'. It looks like that, but unfortunately it does not work properly. Any help will be appreciated.

models.py

class OrderingMassage(models.Model):
    website_rules = models.BooleanField(default=None, blank=True)

forms.py

class OrderingMassageForm(forms.ModelForm):
    class Meta:
        model = OrderingMassage
        fields = ('website_rules')

    def clean_website_rules(self):
        data = self.cleaned_data['website_rules']
        if data == None:
            raise forms.ValidationError("please accept the rules of the website")
        else:
            return data

Upvotes: 0

Views: 216

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476594

If something always (should be) true, then you should not use a Model in the first place. A model stores data. But if all records all have the same, then there is not much data. If a column is always True, then what is the use to store that column?

A second problem you have is that a BooleanField [Django-doc] (well the form field) will yield False as "empty value. So it is probably more Pythonic to check the truthiness, like:

class OrderingMassageForm(forms.Form):
    website_rules = forms.BooleanField(label='I accept the rules of the website.')

    def clean_website_rules(self):
        data = self.cleaned_data['website_rules']
        if not data:
            raise forms.ValidationError("please accept the rules of the website")
        else:
            return data

You thus do not need to call .save() of that form. But .is_valid(..) will validate the form, and thus can render errors.

Upvotes: 2

Related Questions