How can I allow django admin to set a field to NULL?
I've set my Model field to null=True
, which allows NULL in MySQL, but I can't seem to assign NULL to the field through Django Admin. I've tried also setting blank=True
, but that just sets the field to an empty string. Following this didn't work either, as the field value was set to "None", the string.
Any ideas?
Solution 1:
Try to overwrite the save()
method of the Model
, to check for empty values:
class MyModel(models.Model):
my_nullable_string = models.CharField(max_length=15, null=True, blank=True)
def save(self, *args, **kwargs):
if not self.my_nullable_string:
self.my_nullable_string = None
super(MyModel, self).save(*args, **kwargs)
Solution 2:
This section in the docs makes it sound like you can't set a string-based field to NULL
through the admin; it will use the empty string. This is just the way Django does it. It will work for other types of fields.
You'll either have to hack on the admin script or else decide it doesn't really need to be NULL in the database; an empty string is OK.
Solution 3:
try this code, here Language.subregion hass null=True this code overwrites admin form settings (LanguageAdmin) and sets "subregion" field property - required to False
from app.models import Language
from django.contrib import admin
class Language(models.Model):
subregion = models.ForeignKey(SubRegion, null=True)
code = models.CharField(max_length=10, unique=True)
class LanguageAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
form = super(LanguageAdmin, self).get_form(request, obj, **kwargs)
form.base_fields['subregion'].required = False
return form
admin.site.register(Language, LanguageAdmin)
Solution 4:
Usually, when you pass both null=True
and blank=True
, if you leave the field blank in the admin, Django
will use NULL
for its value.
EDIT:
as agf
explains in his answer, this is true for all types except CharField
and TextField
.