2012-05-29 9 views
6

Sono consapevole che quando si utilizza MyModel.objects.create in Django, è possibile passare un dizionario con chiavi che corrispondono ai campi del modello in MyModel. Questo è spiegato in un'altra domanda: Can a dictionary be passed to django models on create?È possibile passare un dizionario con elementi estranei a un metodo object.create di Django?

Tuttavia, sto provando a passare in un dizionario che ha più chiavi di quanti siano i campi del modello - in altre parole, alcuni dei tasti non sono usati nella creazione dell'oggetto . È possibile farlo in qualche modo? Per esempio:

data_dict = { 
    'key1': value1, 
    'key2': value2, 
    'key3': value3, 
} 

class MyModel(models.Model): 
    key1 = models.SomeField() 
    key2 = models.SomeField() 

m = MyModel.objects.create(**data_dict) 

Quando provo questo, ottengo un errore che mi diceva che " 'key3' è un argomento chiave non valido per questa funzione". Sto passando il dizionario in modo errato? C'è un modo diverso per passarlo al modello, il che significa che il modello non deve usare tutti gli argomenti? O dovrò semplicemente essere necessario specificare manualmente ogni campo come questo:

m = MyModel.objects.create(
    key1 = data_dict['key1'], 
    key2 = data_dict['key2'], 
) 
+0

è necessario specificare ciascun campo manualmente. –

+0

è possibile specificare meno ma non più solo –

risposta

6

È possibile filtrare, quindi passare il dizionario in questo modo:

MyModel.objects.create(**{key: value for key, value in data_dict.iteritems() if key in MyModel._meta.get_all_field_names()}).

+2

2.7. Prima dovresti fare '** dict ((chiave, valore) per ...)' –

+0

è bello. Grazie – kmonsoor

Problemi correlati