Vini.g.fer
Vini.g.fer

Reputation: 11909

Django CharField accepting empty values when it shouldn't

I have the following model:

class ClientDebt(models.Model):
    client_id = models.CharField(max_length=255)
    ...

I was expecting this model to prevent records without a client_id, but I quite don't understand why I can create a ClientDebt without a client_id using a django shell (python manage.py shell_plus).

Changing it to CharField(max_length=255, null=False, blank=False) and trying to create+execute new migrations also didn't work, as Django did not detected any changes. There is no default value from what I could see in previous migrations, but it seems to be recording "" (empty string) in the field.

Can anybody tell me what is going on? Why is my model accepting null/blank values? Can this be a bug in Django? I'm using Django version 2.2.1

Upvotes: 3

Views: 1280

Answers (3)

aggregate1166877
aggregate1166877

Reputation: 3150

Have a look at this answer:

class ClientDebt(models.Model):
    client_id = models.CharField(max_length=255, blank=False, default=None)
    ...
  • blank will prevent an empty string to be provided in your model
  • default=None will set name to None when using something like group = Group(), thus raising an exception when calling save

Alternatively, you may want to have a look at MinLengthValidator.

Upvotes: 1

Morgan
Morgan

Reputation: 1

You can set default = '' to your fields

Upvotes: -2

schillingt
schillingt

Reputation: 13731

blank is only used with form validation. If you are having records created with empty values you'll need to write some custom checks to prevent that.

Upvotes: 4

Related Questions