I created a ticket <https://code.djangoproject.com/ticket/31231> about the similliar problem, but after answer I don't sure that it's bug. Nevertheless, I think It looks contradictory, because you use python None in case of creating, but {{{ __isnull=True }}} in case of filtering. In case, that I described bellow, it also looks strange. TestModel.objects.create(json_field=None) creates SQL NULL, but TestModel.objects.create(json_field={'key': None}) creates JSON NULL. May be this behaviour needs to change? Or is it better to extend the documentation? Is this API allow to create a field with just JSON NULL value?
class TestJsonbNull(TestCase): def setUp(self): TestModel.objects.create(json_field=None) TestModel.objects.create(json_field={'key': None}) # test passed def test_1(self): self.assertTrue(TestModel.objects.filter(json_field=None).exists()) # test failed def test_2(self): self.assertTrue(TestModel.objects.filter(json_field__key=None). exists()) вторник, 12 июля 2016 г., 18:56:47 UTC+5 пользователь barth...@infobart.com написал: > > I believe I found a limitation in the Django jsonb support, but I'm really > not sure how the framework could fix it beside adding a limitation section > in the documentation. > > Basically, it is possible to fetch models with json 'null' values but it > is not possible to save them back (Django converts the json 'null' value to > sql NULL value). > > Assume the following model: > > class Container(models.Model): > data = JSONField(blank=False, null=False) # emphasis on null=False > > > In PostgreSQL, it is perfectly reasonable to do this: > > INSERT INTO container VALUES (1, 'null'); > > > If you fetch the row in Django, you will get this: > > container = Container.objects.get(pk=1) > > assert container.data is None # passes > > container.save() # raises IntegrityError because it tries to save NULL in > a NOT NULL column. > > > This is because Django has no idea whether you want to store None or > 'null'::jsonb. > > > I'm not sure if this limitation was discussed elsewhere. I found a > somehow-related ticket here: https://code.djangoproject.com/ticket/25718. > > > Barthélémy > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/e2f01198-13a5-4f4b-9707-3cecf00e06e7%40googlegroups.com.