스코어 카드라는 모델. 스코어 카드에는 고유 한 CharField name
이 있습니다. .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
인 경우 무언가해야합니까?
참고 : 파일 이름이 불량 할 수도 있음을 알고 있습니다. 나는 아마 그 부분을 slugifying 또는 나중에 무언가에 의해 고칠 것이다.
... 당신이 명시 적으로 말한 것 때문에 * 기존의 것을 편집 할 때만 가능합니다. –
신호를 처리 할 때 instance.pk가 None 일 때 수행 할 작업을 명시 적으로 명시해야합니까, 아니면 .save()로 계속 진행해야합니까? – Jarad
나는 당신이 여기에서 원하는 것을 정말로 이해하지 못한다. 아무도 없을 때 같은 일이 일어나지 않게하려면 if 문을 사용하지 마십시오. –