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가 존재하는지 확인이 가능하다.