0
      "tags" : "['x', 'y', 'z']"

各要素を抽出し、各要素を次のようなタグテーブルに追加したい

       tag1 = x
       tag2 = y 
       tag3 = z 

イベントの異なる行のタグ テーブルに各タグを格納する必要があります。

     table: Event
       id, title, ...

     table: Tag
       Tagid, eventid, tagname

タグはイベントごとに異なる場合があります。

4

3 に答える 3

0

または評価なし:

t = {"tags" : "['x', 'y', 'z']"}
tags = [el.replace("'","").strip() for el in t['tags'][1:-1].split(',')]

# Basic string splitting:
tags = t['tags'].split(',')

# To replace a character in a string, like "z"
"a123".replace("a", "b") => "b123

# To strip whitespace:
"  Wow  ".strip() => "Wow"

# Then, a list comprehension to loop through elements of an array and put them in new array:
x = [1, 2, 3]
y = [i+1 for i in x]  =>  [2, 3, 4]

# All together, this becomes
tags = [el.replace("'","").strip() for el in t['tags'][1:-1].split(',')]

eval はコード インジェクションの影響を受けやすく、予測できないため、悪であると言う人もいます。しかし、入力を信頼している限り、問題はありません。を使用するast.literal_evalと、基本的な型に対してのみ評価されるため、eval よりもはるかに優れているため、コード インジェクションについて心配する必要はありません。

于 2013-11-07T04:23:31.740 に答える
0

Ignacio Vazquez-Abrams の回答から、次のようにリストに変更できます。

     tags = ast.literal_eval(tags)  #converted to the list

     ##Stored the tags with event_id in the tags table. 
     eventobj = Event.objects.get(pk=1)
     for i in range(len(tags)):
        tagsobj = Tags.objects.create(name = tags[i], event_id = eventobj.pk)
     tagsobj.save()
于 2013-11-07T05:09:30.793 に答える
0
>>> t = {"tags" : "['x', 'y', 'z']"}
>>> import ast
>>> ast.literal_eval(t['tags'])
['x', 'y', 'z']

そして今はリストです。

于 2013-11-07T04:14:36.433 に答える