Bene, penso che la domanda si spieghi da sola.Trova quali campi sono diversi tra due istanze dello stesso Modello
Ho due istanze di un modello Django e vorrei sapere quali campi sono diversi.
Come hai potuto farlo in modo intelligente?
Cheers!
Bene, penso che la domanda si spieghi da sola.Trova quali campi sono diversi tra due istanze dello stesso Modello
Ho due istanze di un modello Django e vorrei sapere quali campi sono diversi.
Come hai potuto farlo in modo intelligente?
Cheers!
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.
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
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
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