﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
29656	Range Fields do not support blank values via ModelForm	James Addison	nobody	"The filing of this issue is based on a discussion in IRC (see https://botbot.me/freenode/django/2018-08-09/?msg=103129716&page=12 and prior messages), followed up by creating a test project to reproduce the issue.

Please do correct me if I am misusing range fields.

----

Saving a modelform with a model's rangefield 2 inputs left empty triggers an DB integrity error. I think the culprit lies with `empty_values` not containing `['', '']` as a possible empty value. (see the code around https://github.com/django/django/blob/1.11.15/django/forms/fields.py#L1026)

With a view like:

{{{
def home(request):
    if request.method == 'POST':
        form = RangeTestForm(request.POST)
        if form.is_valid():
            instance = form.save()
    else:
        form = RangeTestForm(request.POST)

    return render(request, 'rangefieldtest/home.html', {'form': form})
}}}

Form like:
{{{
class RangeTestForm(forms.ModelForm):
    class Meta:
        model = RangeTest
        fields = '__all__'
}}}

and Model like:
{{{
from django.contrib.postgres.fields import FloatRangeField
from psycopg2._range import NumericRange

class RangeTest(models.Model):
    name = models.CharField(max_length=50, blank=True, default='')
    age_range = FloatRangeField(blank=True, default=NumericRange)
}}}

I will attach a sample project demonstrating this (use runserver, load the home page, click save)


----
psql table definition:
{{{
                                  Table ""public.rangefieldtest_rangetest""
  Column   |         Type          |                               Modifiers
-----------+-----------------------+-----------------------------------------------------------------------
 id        | integer               | not null default nextval('rangefieldtest_rangetest_id_seq'::regclass)
 name      | character varying(50) | not null
 age_range | numrange              | not null
Indexes:
    ""rangefieldtest_rangetest_pkey"" PRIMARY KEY, btree (id)
}}}

data successfully stored on save (when at least one of the rangefield's 2 inputs are filled in):
{{{
 id | name | age_range
----+------+-----------
  2 |      | [3.0,)
(1 row)
}}}"	Bug	new	Forms	1.11	Normal				Unreviewed	0	0	0	0	0	0
