Warnings (or even info messages) instead of only errors in Django

后端 未结 3 905
小蘑菇
小蘑菇 2021-01-02 06:36

Does the concept of severity exist in Django\'s form validation or is it only errors?

Also, how about suppressing warnings/errors?

3条回答
  •  时光说笑
    2021-01-02 07:15

    Old question, but I think it is still relevant.

    It really depends on what you consider to be a warning.

    • You may accept partially valid data in your form (not raise ValidationError on fields upon which you want warnings). Then, using the contrib.messages framework (or similar), you may display a warning box on the next page (be it the same form page, or a redirection to home or any other page)
    • Alternatively, you might want confirmation instead of a warning. You may add or alter fields dynamically upon creation, so why not add hidden "I accept the risks" checkboxes that are required only if your form raises that warning?

      1. User loads form. Checkbox is an hidden HTML input set to false.
      2. User fills form with data that raises warning. Form is displayed again, but now the checkbox is visible.
      3. User checks box then resubmits their form.
      4. The server handles the data correctly and ignores the warning.

    The second option has the advantage of not requiring cookies, and it also adds interactivity (your user might not want to proceed because of the warning...).

    In your code, all you would have to do is this:

    #views.py
    ...
    if form.is_valid():
        # proceed
    else:
        form.fields["my_checkbox"].widget = widgets.CheckboxInput
        # re-display form
    ...
    
    
    #forms.py
    ...
    def clean_myfield(self):
        # do your cleaning
        if (myfield_warning==True) and not (my_checkbox==True):
            raise ValidationError("blabla")
        else:
            return myfield
    

    In your view, you may check for appropriate errors in form.errors if needed.

提交回复
热议问题