22번째 줄: |
22번째 줄: |
| </syntaxhighlight>파일을 정규표현식을 이용해 저장경로를 설정할 수 있다. 년월일로 저장하는 등 방식으로 저장하면 사람이 찾긴 힘들어지지만, 컴퓨터의 검색 속도는 더욱 빨라진다. | | </syntaxhighlight>파일을 정규표현식을 이용해 저장경로를 설정할 수 있다. 년월일로 저장하는 등 방식으로 저장하면 사람이 찾긴 힘들어지지만, 컴퓨터의 검색 속도는 더욱 빨라진다. |
| | | |
| + | === save 오버라이드 === |
| + | 객체를 수정하여 새로 업로드 할 때 기존 파일을 지우지 않고 새 파일만 올리는 경우가 있다. 이런 경우 기존 파일은 그대로 남아 곤란한 찌꺼기가 된다.<syntaxhighlight lang="python"> |
| + | def save(self, *args, **kwargs): |
| + | '''업로드 파일이 기존 파일과 다를 경우에 기존파일을 삭제하기 위한 save 오버라이드.''' |
| + | try: |
| + | this = HomeworkAnswer.objects.get(id=self.id) |
| + | if this.file != self.file: |
| + | this.file.delete(save=False) |
| + | except: |
| + | pass # when new photo then we do nothing, normal case |
| + | super(HomeworkAnswer, self).save(*args, **kwargs) |
| + | </syntaxhighlight> |
| + | |
| + | === 객체 삭제 전 file 삭제 === |
| + | 기본적으로 객체를 지워도 파일 필드의 파일은 남는다. 지워줘야 맞지.<syntaxhighlight lang="python"> |
| + | from django.db.models.signals import pre_delete |
| + | from django.dispatch import receiver |
| + | ... |
| + | |
| + | @receiver(pre_delete, sender=HomeworkAnswer) |
| + | def delete_homework_answer_file(sender, instance, **kwargs): |
| + | # 모델 인스턴스가 삭제되기 전에 파일을 삭제합니다. |
| + | if instance.file: |
| + | instance.file.delete(save=False) |
| + | </syntaxhighlight> |
| == 폼 == | | == 폼 == |
| <syntaxhighlight lang="python"> | | <syntaxhighlight lang="python"> |