2017-11-29 33 views
0

私は物事を注文するために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を使用しています。

答えて

0

[OK]を、非常に多くの異なるものを試した後、私は最終的に(実際には非常に簡単です)解決策を見つけた:ちょうど Order.objects.updateを(追加)get_or_create()を呼び出す前に

関連する問題