Как применить функцию md5 к полю в django orm?
Как я могу создать этот sql-запрос из модели без использования объектов.сырье() метод? БД-это MySQL.
SELECT * FROM model_table WHERE MD5(field) = 'my value';
1 ответов
у вас есть два пути:
Первый способ: Extra
дополнительно способ: Entry.objects.extra(where=["MD5(field) = 'my value'"])
Плюсы: быстрое кодирование.
Минусы: Не индекс дружественный, полное сканирование, низкая производительность.
Второй способ: новое поле
добавление нового поля в модель, field_md5
и установите его на save
.
import hashlib
myModel(models.Model):
field = models.CharField(max_length=30)
field_md5 = models.CharField(max_length=16, editable = false )
def save(self, *args, **kwargs):
self.field_md5 = hashlib.md5.new(self.field).digest()
super(Model, self).save(*args, **kwargs)
Плюсы: Высокая производительность.
минусы: изменения в базе данных требуемый.
EDIT: в python3 используйте
...
super().save(*args, **kwargs)
...
вместо:
...
super(Model, self).save(*args, **kwargs)
...