私は、次のDjangoのモデルを持っている:リストでモデルをフィルタリングして、別のリストを別のフィールドを設定し
class Profile(models.Model):
idNum = models.charField(max_length=10, unique=True)
active = models.BooleanField(default=False)
idType = models.charField(max_length=10)
そして、私は2つのリストがあります:idNums
とidTypes
(同じ長さ):
idNums = ['1', '3', '5', '7', ...]
idTypes = ['1', '1', '0', '2', '2', ...]
Profile
をidNums
に従ってフィルタリングし、対応するフィールド値をidTypes
に設定します。
明白な方法は次のとおりです。
for idNum, idTypes in zip(idNums, idTypes):
profile = Profile.objects.get(idNum=idNum)
profile.active = True
profile.idType = idType
profile.save()
は、このOKですか?つまり、処理するプロファイルインスタンスが何千もある場合は、時間がかかりますか?
もっと速い方法がありますか?私が考えることができるのは、たとえば、インスタンスのリストを最初に取得することです。
profiles = Profile.objects.filter(idNum__in=idNums)
次に何ですか?
'idType'は' idNum'とは何の関係もありませんし、それらがユーザーによってアップロードされたファイルから取得されます。その場合、プロセスをスピードアップするにはどのような機会が必要ですか?ありがとう。 –
これが当てはまる場合は、私が提案した最初の解決策(forループを使用)以外のことは考えられません。 –
もう一つの可能な解決策:パフォーマンスが本当に重大で、未処理のSQLを恐れていない場合は、次の行に沿って試してみてください。http://stackoverflow.com/a/2528188/4904093もちろん、Pythonコードでクエリを手動で構築する必要があります。 –