Django QuerySet filter and Model save error

lightcat·2022년 9월 28일
0

Django에서 QuerySet관련 메소드를 이용하여 DB데이터를 조회할 수 있는데, 이것은 QuerySet 객체이기 때문에 Model.save() 기능을 바로 활용하지 못한다.

price_info_status = StockInfoUpdateStatus.objects.filter(table_type='P') \
	.filter(stock_event_id=event_info.stock_event_id)
    
=> <QuerySet [<StockInfoUpdateStatus: StockInfoUpdateStatus object (3)>]>

위 처럼 Model.objects.filter 기능을 이용하면 QuerySet 객체를 반환한다.
여기서 바로 Model.save()를 사용하게 되면

price_info_status.save()

=> AttributeError: 'QuerySet' object has no attribute 'save'

위 에러가 뜨게 되므로

price_info_status.first().save()
or
price_info_status.[0].save()

처럼 원소하나를 꺼내서 Model 객체를 반환하여 save 시켜줘야 한다.

Model.objects.filter대신 단일데이터를 조회하는 Model.objects.get을 이용할 수도 있지만 데이터가 없다면 DoesNotExist 에러가 나므로 따로 Exception 처리를 따로 해줘야 한다.

price_info_status = StockInfoUpdateStatus.objects.get(
        Q(table_type='P') & Q(stock_event_id=event_info.stock_event_id))
=> stocksimul.models.StockInfoUpdateStatus.DoesNotExist: StockInfoUpdateStatus matching query does not exist.

Model.objects.filter는 데이터가 없다면 <QuerySet []> 형태로 반환되고,
count() 함수를 통해 데이터가 없는지 몇개의 row가 존재하는지 확인이 가능하다.

0개의 댓글

관련 채용 정보