naftalimich
naftalimich

Reputation: 411

How can I define a check constraint on a string length (Django)

I am looking to do the following:

 constraints = [models.CheckConstraint(check=Length('code')==5, name='code_length')]

It fails because the check argument needs to be a A Q object or boolean Expression that specifies the check you want the constraint to enforce

I'm not seeing string length field lookup nor am I seeing a way to incorporate the Length database function into a Q object argument. The only other option is a boolean expression (which is what I aimed at in my failed attempt above) but apparently this is an API that I have to implement.

I am new to Django and would appreciate the help.

Upvotes: 1

Views: 1125

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476739

You can register the Length on a CharField:

from django.db.models import CharField
from django.db.models.functions import Length

CharField.register_lookup(Length)

and then define the constraint with the registered __length lookup:

from django.db import models
from django.db.models import Q

class SomeModel(models.Model):
    # …
    
    class Meta:
        constraints = [
            models.CheckConstraint(check=Q(code__length=5), name='code_length')
        ]

Upvotes: 2

Related Questions