私は物事を注文するためにDjangoアプリケーションを書いています。すべての注文には特定のタイプのタイプがあります。 Type.is_common == trueの場合、ユーザーがこのタイプを注文したかどうかに関係なく、配送に含める必要があります。 post_saveシグナルを使用して、dbに特定の配信のための共通の注文が既にあるかどうかを確認しています。ここでは、コードは次のようになります。Django post_save:データベースはまだ更新されていませんか?
@receiver(post_save, sender=Order)
def create_common_order(sender, instance=None, created=False, **kwargs):
""" This signal handler creates common orders (if delivery type
definition contains any common types) for every first order of a
user for a certain delivery. """
# Don't handle this if the order is not for a delivery
if not created or not instance or not instance.delivery:
return
# Don't handle Order with common types
if instance.type.is_common:
return
# Loop through all types in type definition of delivery
for t in Type.objects.all():
# Look for a 'is_common' type
if type.is_common:
# Get or create an order with the respective values
Order.objects.get_or_create(
delivery=instance.delivery,
user=instance.user,
type=type,
defaults={'count':1}
)
私の問題は、以下の通りである。(2件の新規受注がほぼ同時に作成されている場合)時々、2件の一般的な注文が作成されていることが起こります。しかし、なぜ? post_saveでデータベースがまだ更新されていませんか?どのように私はこの動作を防ぐことができますか? 私はsqlite3 dbを使用しています。