2015-07-28 10 views

risposta

4

Diciamo che obj1 e obj2 sono 2 istanze del modello MyModel.

Per sapere quali campi differiscono su due istanze di un modello Django, prima otteniamo tutti i campi di un modello e lo memorizziamo in una variabile my_model_fields.

my_model_fields = MyModel._meta.get_all_field_names() # gives me the list of all the model fields defined in it 

Poi applichiamo filter() con lambda sapere quali campi si differenziano tra di loro.

filter(lambda field: getattr(obj1,field,None)!=getattr(obj2,field,None), my_model_fields) 

La funzione filter() mi restituirà l'elenco dei campi modello che differiscono tra le due istanze.

+0

Grazie per la rapida risposta! Ho provato: my_model_fields = self._meta.get_all_field_names() # mi fornisce l'elenco di tutti i campi del modello definiti nel filtro (campo lambda: getattr (self, campo, None)! = Getattr (orig, field, None) , my_model_fields) ... Che viene chiamato nel metodo di salvataggio di un'istanza, ma ottengo: NameError auto nome globale non è definito ... Qualche suggerimento? – gabn88

+0

Nevermind! Se faccio change_fields = filter (campo lambda: getattr (obj1, campo, None)! = Getattr (obj2, campo, None), my_model_fields) Torno indietro ai campi modificati! – gabn88

+0

Forse dovrei farlo in una domanda di follow-up, ma come posso fare ora: per il campo in change_fields: qs = MyModel.objects.filter (something = something), qs.update (*** FIELD *** = F (campo)), come si fa il *** CAMPO **? – gabn88

Problemi correlati