2012-05-29 12 views
6

Ich bin mir bewusst, dass bei der Verwendung von MyModel.objects.create in Django ein Wörterbuch mit Schlüsseln übergeben werden kann, die den Modellfeldern in MyModel entsprechen. Dies wird in einer anderen Frage hier erläutert: Can a dictionary be passed to django models on create?Ist es möglich, ein Dictionary mit externen Elementen an eine Django-Methode object.create zu übergeben?

Ich versuche jedoch, ein Wörterbuch, das mehr Schlüssel als es gibt Modellfelder übergeben - anders gesagt, einige der Schlüssel sind nicht bei der Erstellung des Objekts verwendet . Ist es möglich, dies irgendwie zu tun? Zum Beispiel:

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

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

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

Wenn ich das versuche, erhalte ich einen Fehler mir zu sagen, dass „‚key3‘ist ein ungültiges Schlüsselwort-Argument für diese Funktion“. Übergeben Sie das Wörterbuch falsch? Gibt es eine andere Möglichkeit, das Modell an das Modell zu übergeben, sodass das Modell nicht alle Argumente verwenden muss? Oder muss ich einfach jedes Feld dieses manuell wie angeben:

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

Sie müssen jedes Feld manuell angeben. –

+0

Sie können weniger, aber nicht mehr –

Antwort

6

Sie filtern können, dann geben Ihre Wörterbuch auf diese Weise:

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

+2

2.7 nur angeben. Vorher musst du '** dict ((key, value) für ...)' –

+0

das ist cool. Vielen Dank – kmonsoor

Verwandte Themen