async def create_or_update_object_from_mapping(queryset_object: QuerySet, queryset_base_fields: dict, object_to_map: dict, data_fields: dict) -> None: item_type_model_fields = queryset_base_fields['item_type'].model_fields items = return_field_mapping(item_type_model_fields, object_to_map, data_fields) queryset = queryset_object.filter(**queryset_base_fields) queryset_exists = await queryset.exists() fields = {} fields.update(queryset_base_fields) create_or_update = False ## the Call of Duty API in all of it's infinite wisdom returns 'None' and 0 respectively ## for all fields for any given object, even if the player hasn't played that object. ## thuis, if this is the case we're wasting space int he DB. Just don't continue if this is the case. if not (all(value == 0 or value == None for value in items.values())): fields.update(items) if not queryset_exists: thisobject = await queryset_object.create(**fields) else: await queryset.update(**fields) thisobject = await queryset.first() return thisobject
def get_queryset(cls, queryset: QuerySet, value: Any) -> QuerySet: return queryset.filter(name__icontains=value)
async def get_queryset(self, request: Request, value: Any, qs: QuerySet): value = await self.parse_value(request, value) filters = {self.context.get("name"): value} return qs.filter(**filters)
def get_queryset(cls, queryset: QuerySet) -> QuerySet: return queryset.filter(~Q(key="test"))