#10244: FileFields can't be set to NULL in the db -------------------------------------+------------------------------------- Reporter: oyvind | Owner: Ondrej | Pudiš Type: Bug | Status: assigned Component: Database layer | Version: 1.0 (models, ORM) | Severity: Normal | Resolution: Keywords: filefield NULL | Triage Stage: Accepted empty | Has patch: 0 | Needs documentation: 1 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------------+------------------------------------- Changes (by Ondrej Pudiš):
* owner: nobody => Ondrej Pudiš * status: new => assigned * has_patch: 1 => 0 * needs_tests: 1 => 0 Comment: As I understand the issue, if the file field is specified as nullable, it should accept `None` and in that case, store `NULL` on the database level instead of an empty string. In fact, it shouldn't even create an instance of `FieldFile` when creating a new `NullableDocument` object. The tests listed below are broken now but the patch should fix all of them giving a solution to all the issues enumerated in the comment above. {{{ def test_create_empty(self): # when I create a new document with no file provided d = NullableDocument.objects.create(myfile=None) # I expect that the attribute itself is None self.assertIs(d.myfile, None) # I expect that I can filter the documents and find the one query = NullableDocument.objects.filter(myfile__isnull=True).exists() self.assertTrue(query) # I expect that the object remains None even after refreshing from the DB d.refresh_from_db() self.assertIs(d.myfile, None) def test_create_empty_multiple(self): # when the files are expected to be unique but nullable, I expect that I'm # allowed to create multiple records NullableDocument.objects.create(myfile=None) NullableDocument.objects.create(myfile=None) # and both are created query = NullableDocument.objects.filter(myfile__isnull=True).count() self.assertEqual(query, 2) def test_create_empty_on_not_null(self): # when I try to store an empty file on non-nullable model, I expect to get an # integrity error with self.assertRaises(IntegrityError): Document.objects.create(myfile=None) }}} -- Ticket URL: <https://code.djangoproject.com/ticket/10244#comment:20> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/010701836f8500b5-5cf902f8-b912-4de0-afb2-df6fcb1b0d1d-000000%40eu-central-1.amazonses.com.