예제 #1
0
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
예제 #2
0
 def get_queryset(cls, queryset: QuerySet, value: Any) -> QuerySet:
     return queryset.filter(name__icontains=value)
예제 #3
0
 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)
예제 #4
0
 def get_queryset(cls, queryset: QuerySet) -> QuerySet:
     return queryset.filter(~Q(key="test"))