我有一个JSON变量,如:
myjson = [{"name":"bla", "value":111}, {"name":"ble", "value":222}, {"name":"bli", "value":333}, {"name":"blo", "value":444}]
my Django model is:
class myTable(models.Model):
name = models.TextField(max_length=2000)
bla = models.IntegerField(default=0)
ble = models.IntegerField(default=0)
bli = models.IntegerField(default=0)
blo = models.IntegerField(default=0)
def __unicode__(self):
return '%s, %s, %s, %s' % (self.name, self.bla, self.ble, self.bli, self.blo)
我想保存这一行(从我的视图。py):
from myproject.models import myTable
n = "lalala"
query = myTable(name="lalala", bla=111, ble=222, bli=333, blo=444)
query.save()
我不知道如何构建迭代JSON的查询。
如果我创建一个字符串:
#>>> q="lalala"
#>>> myzonesstring = 'name="'+q+'", '
#>>> for m in myjson:
#... myzonesstring += str(m["name"])+'='+str(m["value"])+', ' ...
#>>> myzonesstring 'name="lalala", bla=111, ble=222, bli=333, blo=444, '
#>>> myzonesstring[:-2] 'name="lalala", bla=111, ble=222, bli=333, blo=444'
#>>> query = myTable(myzonesstring[:-2])
#>>> query.save() [. python . ValueError: invalid literal for int() with base 10: 'name="lalala", bla=111, ble=222, bli=333, blo=444'
我不是那么参与django,但在我看来,你没有正确初始化你的模型。来自django文档:
创建对象要创建一个模型的新实例,只需像任何其他Python类一样实例化它:
类模型(* * kwargs)
关键字参数只是您在模型上定义的字段的名称。
所以我希望你宁愿从你的json中构建一个字典,而不是使用它作为模型的kwargs -init:
myjson = [{"name":"bla", "value":111},
{"name":"ble", "value":222},
{"name":"bli", "value":333},
{"name":"blo", "value":444}]
kwargs = dict(map(lambda x: (x["name"], x["value"]), myjson))
kwargs["name"] = "lalala"
table = myTable(**kwargs)
table.save()
BTW,我把query
重命名为table
;您不创建查询,而是创建对象(myTable类的实例)。当您调用save()
问候,托尔斯滕
@Thorsten:是的,我成功了。下面是代码片段(直接来自my views.py)
mydict = dict(map(lambda x: (x["name"], x["value"]), myjson))
mydict["query"]="lalala"
m = Queries(**mydict)
m.save()
它得到正确保存在数据库中。再次感谢