Как применить функцию 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)
...