2014-08-27 19 views

risposta

6

Avete due modi:

primo modo: Extra

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

Pro: veloce codifica.

Contro: non indicizzabile, scansione completa, prestazioni scadenti.

Secondo modo: nuovo campo

Aggiunta nuovo campo del modello, field_md5 e impostarlo su 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) 

Pro: prestazioni veloci.

Contro: modifiche al database richieste.

+1

Grazie. Questo è il migliore che abbiamo per questo. Scelgo il primo, passando per "dove" kwarg. Fullscan è evitato da altre condizioni in cui l'indicizzazione è in corso. La cosa importante è che non possiamo usare il metodo del modello .get() per aggiungere più condizioni alla richiesta. La versione finale è: Entry.objects.filter (** condizioni) .extra (dove = {'MD5 (campo)': 'il mio valore'})) –