Как определить ограничение проверки по длине строки (Django)

Я хочу сделать следующее:

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

Не получается, потому что аргумент check должен представлять собой Объект Q или булево выражение, которое определяет проверку, которую вы хотите обеспечить ограничением

Я не вижу длины строки поля поиска и не вижу способа включить функцию базы данных Length в аргумент объекта Q. Единственным другим вариантом является булево выражение (на что я и нацелился в своей неудачной попытке выше), но, очевидно, это API, который я должен реализовать.

Я новичок в Django и буду благодарен за помощь.

Вы можете зарегистрировать Length на CharField:

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

CharField.register_lookup(Length)

и затем определите ограничение с зарегистрированным __length поиском:

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')
        ]
Вернуться на верх