2014-08-27 11 views

Odpowiedz

6

Czy masz dwa sposoby:

Pierwszy sposób: Dodatkowe

Extra metoda: Entry.objects.extra(where=["MD5(field) = 'my value'"])

Plusy: szybkie kodowanie.

Minusy: nie przyjazny dla indeksu, pełne skanowanie, słaba wydajność.

Drugi sposób: nowe pole

Dodanie nowego pola na modelu field_md5 i ustawić go na 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) 

Plusy: wysoka wydajność.

Minusy: wymagane zmiany w bazie danych.

+1

Thanx. To jest dla nas najlepsze. Wybieram pierwszy, przechodzę do "gdzie", kwarg. Fullscan jest unikany przez inne w warunkach indeksowania. Ważne jest to, że nie możemy użyć metody modelu .get(), aby dodać więcej warunków do żądania. Wersja ostateczna to: Entry.objects.filter (warunki **) .extra (gdzie = {'MD5 (pole)': "moja wartość"}) –

Powiązane problemy