0

我有一个 JSON 变量,例如:

myjson = [{"name":"bla", "value":111}, {"name":"ble", "value":222}, {"name":"bli", "value":333}, {"name":"blo", "value":444}]

我的 Django 模型是:

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)

我想保存这一行(来自我的views.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'
4

2 回答 2

1

我对 django 的参与度并不高,但在我看来,您没有正确初始化模型。来自 django 文档:

创建对象

要创建模型的新实例,只需像任何其他 Python 类一样实例化它:

类模型(**kwargs)

关键字参数只是您在模型上定义的字段的名称。

所以我希望你宁愿从你的 json 构建一个 dict,而不是将它用作 Model- init的 kwargs :

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()

顺便说一句,我重命名querytable; 您不创建查询,而是创建一个对象(myTable 类的实例)。然后,当您调用 save() 时,该对象负责为数据库创建查询

问候,托尔斯滕

于 2013-01-04T07:25:22.897 回答
0

@Thorsten:是的,它对我有用。这里的片段(直接来自我的views.py)

mydict = dict(map(lambda x: (x["name"], x["value"]), myjson)) 
mydict["query"]="lalala" 
m = Queries(**mydict) 
m.save()

它在 ddbb 中正确保存。再次感谢

于 2013-01-04T08:29:49.783 回答