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にはあまり関与していませんが、モデルを正しく初期化していないようです。ジャンゴのドキュメントから:

オブジェクトの作成

モデルの新しいインスタンスを作成するには、他の Python クラスと同じようにインスタンス化します。

クラスモデル(**kwargs)

キーワード引数は、モデルで定義したフィールドの名前です。

したがって、json から 1 つの 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()

ところで、名前を ; に変更queryしましたtable。クエリを作成するのではなく、オブジェクト (クラス 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 に答える