如何构建一个django查询来保存从json var混合的int和str



我有一个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()

它得到正确保存在数据库中。再次感谢

最新更新