How can you create a non-empty CharField in Django?

后端 未结 5 2013
情话喂你
情话喂你 2020-12-14 06:31

I have a simple model which looks like this:

class Group(models.Model):
    name = models.CharField(max_length = 100, blank=False)

I would

相关标签:
5条回答
  • 2020-12-14 06:44

    another option that doesn't require you to manually call clean is to use this:

    name = models.CharField(max_length=100, 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
    0 讨论(0)
  • 2020-12-14 06:49

    I spent a long time looking for the best solution for this simple (and old) problem, And as of Django 2.2, there is actually a really simple answer, so I'll write it here in case someone still encounters the same problem:

    Since Django 2.2, we can define CheckConstraints, so it's easy to define a non-empty string constraint:

    from django.db import models
    
    class Article(models.Model):
       title = models.CharField(max_length=32)
    
        class Meta:
            constraints = [
                models.CheckConstraint(check=~models.Q(title=""), name="non_empty_title")
            ]
    
    0 讨论(0)
  • 2020-12-14 06:53

    Or you can simply use MinLengthValidator with a 1-char minimum:

    from django.core.validators import MinLengthValidator
    
    class Company(BaseModel):
        """Company"""
    
        name = models.CharField(max_length=255,
                                validators=[MinLengthValidator(1)])
    
    0 讨论(0)
  • 2020-12-14 07:00

    From the Django docs in this case, your name will be stored as an empty string, because the null field option is False by default. if you want to define a custom default value, use the default field option.

    name = models.CharField(max_length=100, blank=False, default='somevalue')
    

    On this page, you can see that the blank is not database-related.

    Update:

    You should override the clean function of your model, to have custom validation, so your model def will be:

    class Group(models.Model):
      name = models.CharField(max_length=100, blank=False)
      def clean(self):
        from django.core.exceptions import ValidationError
        if self.name == '':
            raise ValidationError('Empty error message')
    

    Or you can replace ValidationError to something else. Then before you call group.save() call group.full_clean() which will call clean()

    Other validation related things are here.

    0 讨论(0)
  • 2020-12-14 07:07

    Django’s validation system assumes that all fields are required,unless you mention that its ok to leave it blank..

    Have you registered the class in Admin ? does it show errors when you leave it blank ??

    Django krishna

    0 讨论(0)
提交回复
热议问题