Поле BinaryField
Поле BinaryField предназначено для хранения произвольных двоичных данных в базе данных. Оно используется в моделях Django для работы с файлами в двоичном формате, изображениями, зашифрованными данными или любыми другими бинарными объектами. Поле возвращает данные в виде байтовой строки (bytes). При использовании данного поля следует учитывать, что операции фильтрации и поиска по нему могут быть ограничены возможностями конкретной СУБД.
Синтаксис
from django.db import models
class MyModel(models.Model):
binary_data = models.BinaryField()
Параметры
Поле BinaryField принимает следующие параметры:
max_length - максимальная длина хранимых данных в байтах. Необязательный параметр.
editable - определяет, может ли поле быть изменяемым. По умолчанию True.
default - значение по умолчанию для поля.
null - разрешает ли поле значение NULL. По умолчанию False.
Пример
Создадим модель для хранения изображений в двоичном виде:
from django.db import models
class Image(models.Model):
name = models.CharField(max_length=100)
data = models.BinaryField(max_length=1048576)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
Пример
Сохраним изображение в двоичном формате:
from myapp.models import Image
from django.core.files import File
with open('image.png', 'rb') as f:
binary_content = f.read()
image = Image.objects.create(
name='my_image',
data=binary_content
)
Пример
Получим сохранённое изображение и проверим его размер:
from myapp.models import Image
image = Image.objects.get(name='my_image')
data_size = len(image.data)
print("Image data size:")
print(f"{data_size} bytes")
Результат выполнения кода:
"Image data size:"
"1048576 bytes"
Пример
Создадим модель для хранения зашифрованных данных:
from django.db import models
class EncryptedData(models.Model):
title = models.CharField(max_length=200)
content = models.BinaryField()
is_active = models.BooleanField(default=True)
Пример
Сохраним зашифрованное сообщение в базу данных:
from myapp.models import EncryptedData
import base64
encrypted_message = b'\x00\x01\x02\x03\x04\x05'
data = EncryptedData.objects.create(
title='secret message',
content=encrypted_message
)
print("Data saved:")
print(data.title)
Результат выполнения кода:
"Data saved:"
"secret message"
Пример
Проверим, существует ли запись с указанными данными:
from myapp.models import EncryptedData
has_data = EncryptedData.objects.filter(
content=b'\x00\x01\x02\x03\x04\x05'
).exists()
print("Data exists:")
print(has_data)
Результат выполнения кода:
"Data exists:"
"True"
Смотрите также
-
поле
FileField,
которое используется для хранения загруженных файлов -
поле
ImageField,
которое предназначено для хранения изображений -
поле
JSONField,
которое хранит структурированные данные в формате JSON -
поле
TextField,
которое хранит большие текстовые данные