場合によっては、保存時にカスタム シグナルを発するモデルを取得しました。
この「post_save」を実行すると、Django 管理者からアイテムを更新していない場合は正常に動作しますが、管理者を使用してアイテムを変更すると、想定されているすべてのことを実行しているログ メッセージが表示されます。しかし、それは保存されません。
これは、管理者がビュー レベルのロックを使用しているためであるというこの質問を見ました。ということで、シグナルハンドラへのtransaction.commit()
追加も兼ねて実行してみました。@transaction.commit_manually
残念ながら、データベースには何も保存されません。
更新:正しく保存されていないのは、以下のm2m
関係です。organisations
例外や発生するものはありません。管理者を介してデータベースに入れられないだけです。
参照用の私のハンドラー:
@transaction.commit_manually # tried this as both first and second decorator
@receiver(node_moved, sender=Folder)
def folder_moved_handler(sender, instance, **kwargs):
transaction.commit_manually()
transaction.commit()
# When a folder was so moved it became root
if instance.is_root_node():
# Copy these organisations to the new root
inherit_permissions_from = instance.inherit_permissions_from
print inherit_permissions_from
instance.inherit_permissions_from = None
instance.save()
set_inherited_permissions_descendents(instance, None)
if inherit_permissions_from:
for org in inherit_permissions_from.organisations_with_access:
instance.organisations.add(org)
print 'add org: {0}'.format(org)
else:
instance.inherit_permissions_from = get_who_to_inherit_from(instance)
instance.save()
print 'returning'
print transaction.commit()
私は今、何をすべきか途方に暮れています。長い目で見れば、一般的なワークフローが少しぎこちないので、このタスクに管理者を使用することから遠ざかっていますが、そのための時間ができるまで私はそれを機能させたいだけです。
私が思いついた唯一のことは、フラグを設定して、時々バッチジョブを実行することです。または、現時点では依存関係のない Celery に渡します。
助言がありますか?