Я пытаюсь создать систему приглашений для регистрации пользователей, в которой хранится хэш-сумма md5 на основе идентификатора объекта. Вот как определяется моя модель:
class Invite(TimestampedModel):
user = models.ForeignKey(User, default=None, null=True, blank=True, on_delete=models.CASCADE)
_code = models.BinaryField(max_length=16, unique=True)
@classmethod
def create(cls):
invite = cls.objects.create()
hash_obj = hashlib.md5()
hash_obj.update(str(invite.id).encode('utf-8'))
invite._code = hash_obj.digest()
invite.save()
return invite
Таким образом, когда я вызываю Invite.create()
, я вижу в базе данных строку с _code
длиной 16 символов (например, ��#�"��Zo�n�%��V
).
Проблема возникает, однако, когда я настраиваю max_length
на 2
. Я ожидал, что Django либо выдаст ошибку, либо усечет значение до двух байтов, но этого не произошло; Я все еще вижу 16 байтов в новых строках. Да, я управлял makemigrations
и migrate
.
Что здесь происходит? Это немного о том, что я не могу ограничить длину вообще. Я предполагаю, что по умолчанию 50
, но я понятия не имею, почему. Любые мысли приветствуются.
Описание BinaryField здесь.