У меня есть модель, в которой я хочу хранить несколько маленьких (2-4 байта) байтовых строк (например: b'foo'
или b'\x02'
).Я задаюсь вопросом о том, как лучше всего смоделировать их на моей модели Django.Я думал, что смогу использовать CharField
, но это не работает, как я ожидал.BinaryField, кажется, работает, но я не уверен, подходит ли он для полей короткой длины (опять же, обычно 2-4 байта)
Учитывая модель:
class Foobar(models.Model):
charfield = models.CharField(max_length=10)
binaryfield = models.BinaryField()
КогдаЯ делаю:
>>> fb1 = Foobar()
>>> fb1.charfield = b'\0000'
>>> fb1.binaryfield = b'\0000'
>>> fb1.save()
И затем читаю запись обратно:
>>> read = Foobar.objects.get(id=fb1.id)
>>> read.charfield == b'\0000'
False
>>> read.binaryfield == b'\0000'
True
Я бы ожидал, что обе проверки на равенство будут True.Кроме того, документы , кажется, указывают, что фильтрация набора запросов в двоичном поле недопустима (и это то, что мне нужно уметь).Сказав это, мне кажется, что это работает:
>>> Foobar.objects.filter(binaryfield__in=[b'\0000', b'blarg'])
<QuerySet [<Foobar: Foobar object>]>
Я что-то упускаю из CharField?Является ли BinaryField подходящим выбором здесь?Или есть лучшая альтернатива?
В случае, если это имеет значение, я использую Django 1.11 (самая последняя версия LTS в настоящее время), и это проект, работающий на Python 3.6.