0

Django でオブジェクトを作成するために iteritems() を使用して辞書を繰り返し処理しています。しかし、作成されたオブジェクトの数がディクショナリ オブジェクトの数と同じではないことがわかりました。

これをさらに調べてみると、ディクショナリ自体には 269 個の項目が含まれているのに対し、ディクショナリの iteritems() メソッドは 197 個のタプルしか返さないことがわかりました。

data = {...}
print len(data) #output: 269
for k, v in data.iteritems():
    Category.objects.create(name=k).save()
len(Category.objects.all()) #output: 197

モデル定義:

class Category(models.Model):
    name = models.CharField(max_length=100)
4

1 に答える 1

2

まず、 をlen(Category.objects.all())オブジェクトのカウントに使用することはお勧めしません。代わりに、使用する必要があります

Category.objects.count()

スタイルの問題ではなく、効率の問題です。後者は SQL COUNT を使用するため、オブジェクトの数は python ではなくデータベース (mysql、sqlite など) によって計算されます。

267 ではなく 192 のオブジェクトを取得している理由についてコメントすることはできません。私の推測では、create関数が使用できないパラメーターを取得しているためです。k文字列ではないか、長さが 100 文字を超えている可能性があります。

保存されなかった要素を調査し、この情報を提供していただけますか?

于 2012-10-08T08:52:08.220 に答える