I have this code
subject = models.ForeignKey(subjects)
location = models.ForeignKey(location)
publisher = models.ForeignKey(publisher)
There its not always possible that I have three values of books. so sometimes if I don't know subject or location, or publisher. Then I want to keep them empty
But if I have then I need select box to select. is it possible like that
Sure, just add blank=True, null=True
for each field that you want to remain optional like
subject = models.ForeignKey(subjects, blank=True, null=True)
In order to accomplish this, the on_delete
argument is necessary along with blank=True
and null=True
, and it would be better if you do it this way.
subject = models.ForeignKey(subjects, on_delete=models.SET_NULL, blank=True, null=True)
null=True
subject=models.ForeignKey(subjects, on_delete=models.CASCADE, default=None, blank=True, null=True)
Field.null
If True, Django will store empty values as NULL in the database. Default is False.
Avoid using null on string-based fields such as CharField and TextField. If a string-based field has null=True, that means it has two possible values for “no data”: NULL, and the empty string. In most cases, it’s redundant to have two possible values for “no data;” the Django convention is to use the empty string, not NULL. One exception is when a CharField has both unique=True and blank=True set. In this situation, null=True is required to avoid unique constraint violations when saving multiple objects with blank values.
Success story sharing
null=True
.blank=True
is important for form validation. It will allow an empty string as user input in this field.null=True
will allow NULL value in the database column.blank=True, null=True
but do now with the migrations applied? I have this situation and while the schema looks good, the admin form won't allow a blank. Other FKs that allowed blanks originally work though and I don't see the difference.