スコアカードという名前のモデル。スコアカードには、name
CharFieldがあります。 .csvファイルをメディアフォルダに保存します。私はpre_save
信号を作成しようとしています(変更されている可能性があるため)古い名前を取得し、削除するメディアの.csvファイルを確認します。Djangoのpre_saveシグナルには他に必要ですか?
以下の信号コードをコメントアウトして新しいインスタンスを作成すると、必要に応じて.csvが自分のメディアフォルダに作成されます。
以下の信号をコメント解除すると、.csvファイルは、既存のインスタンスを編集して保存するときにのみ出力されますが、作成時には出力されません。
@receiver(pre_save, sender=Scorecard)
def file_delete_handler(sender, instance, **kwargs):
print('INSTANCE ID:', instance.pk)
if instance.pk is not None:
old = Scorecard.objects.get(pk=instance.pk)
print(old.name)
file_path = os.path.join(MEDIA_ROOT, ''.join([old.name, '.csv']))
if os.path.exists(file_path):
os.remove(file_path)
これは、これがelse文なしのif文であると考えられますか?私はelse: return
とelse: pass
を試しました。私は何を理解していないのですか?インスタンスがNone
の場合は、何かする予定ですか?
注:ファイル名が貧弱なため、名前の由来はわかりません。私はおそらく、その部分を後で修正するつもりです。
...これは、あなたが明示的に言いましたように、既存のものを編集するときだけです*、確かに? –
シグナルを扱うときにinstance.pkがNoneのときに何をすべきかを明示的に指定しなければならないのですか、それとも.save()に続行されることになっていますか? – Jarad
私は本当にここであなたが望むものを理解していません。それが誰もいないときと同じでないときに同じことが起こるようにするには、ifステートメントを持たないでください。 –