reqeust.FILES is not vaild
model.py
class Heartbeat(models.Model):
audio_idx = models.AutoField(primary_key=True)
user_id = models.CharField(max_length=64)
dog_name = models.CharField(max_length=32)
create_date = models.DateTimeField(auto_now_add=True)
heartbeat_normal_condition = models.IntegerField(null=True)
audio_file = models.FileField(upload_to="heartbeat_data/")
form.py (before)
class HeartBeatForm(ModelForm):
class Meta:
model = Heartbeat
fields = ('user_id', 'dog_name', 'audio_file')
view.py (before)
def save_audio_file(request):
try:
if request.method == "POST":
audio_data = HeartBeatForm(request.POST, request.FILES)
if audio_data.is_valid():
obj = audio_data.save(commit=False)
obj.heartbeat_normal_condition = -1
obj.save()
return HttpResponse()
else:
return HttpResponseForbidden(audio_data)
else:
return HttpResponseNotAllowed()
except Exception as e:
return HttpResponseServerError(e)
위와 같은 코드에서 view.py
에 보면 audio_data = HeartBeatForm(request.POST, request.FILES)
이부분에서 자꾸 request.FILES
의 file 을 무시하고 (실제로 request.FILES
에는 파일이 잘 들어가 있음) audio_file
필드와 매핑이 안되는 오류가 있었다. django document 와 해당 블로그 에서 나와있기로는 그냥 Form(request.POST, request.FILES)
으로 매핑하면 잘 되는데 왜이런지는 잘 모르겠지만, view.py
와 form.py
를 조금 수정해서 vaild 되게 하였다.
view.py (after)
def save_audio_file(request):
try:
if request.method == "POST":
audio_data = HeartBeatForm(request.POST)
if audio_data.is_valid() and request.FILES['audio_file']:
obj = audio_data.save(commit=False)
obj.audio_file = request.FILES['audio_file']
obj.heartbeat_normal_condition = -1
obj.save()
return HttpResponse()
else:
return HttpResponseForbidden(audio_data)
else:
return HttpResponseNotAllowed()
except Exception as e:
return HttpResponseServerError(e)
form.py (after)
class HeartBeatForm(ModelForm):
class Meta:
model = Heartbeat
fields = ('user_id', 'dog_name')
form.py
에서는 audio_file
필드를 받아주는 부분을 삭제하였고, view.py
에서 request.FILES['file_name']
으로 vaild를 체크한 다음 따로 넣어주었다.
'개발공부 > 시행착오' 카테고리의 다른 글
Ubuntu 20.04 설치 후 해야하는 일 (0) | 2020.07.01 |
---|---|
Ubuntu - apt-get -y 옵션 (0) | 2020.06.09 |
python python3 alias 변경 (0) | 2020.04.26 |
django - No Python interpreter configured for the module (0) | 2020.04.16 |
Spring - No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call 에러 해결 (0) | 2020.02.28 |