0

シリアル化されたデータを返すリクエストを行っています。私はデータを反復処理し、データベースに存在するかどうかを確認します。存在する場合は無視され、存在しない場合は保存されます。私が抱えている問題は、forループがデータのすべてのキーを繰り返し処理し、データベースにあるものと比較しても、最初のレコードのみを保存することです。私のコードは次のとおりです。

b = MyModel()
data #The serialized data
existingData = Off.object.filter(...)

for key in data:
    if existingData.filter(id_str=key['id_str']).exists():
        pass #If I place a print key['id_str'] here, all skipped items are printed.
    else:
        b.x = key['x']
        b.y = key['y']
        b.save()

関数が実行されるたびにb.save()、カウンターが増加した後、elseステートメントの下部にカウンターが配置されますが、チェックに合格した最初のレコードのみが保存され、データ内の残りの項目は保存されません。どこが間違っているのですか?

4

1 に答える 1

2

まず、新しいオブジェクトを作成する代わりに、同じオブジェクトを上書きしている 可能性があります。つまり、いくつかのオブジェクトが存在しないことを確認しますが、の属性と属性を上書きするだけです。多分あなたがする必要があるのは:bid_strbxy

for item in data:
    if not existingData.filter(id_str=item.get('id_str')).exists():
        MyModel.objects.create(id_str=item.get('id_str'),
                               x=item.get('x'),
                               y=item.get('y'))

お役に立てれば :)

乾杯!

于 2012-12-11T16:44:26.120 に答える