TypeError: get_object () принимает 1 позиционный аргумент, но 2 - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь создать объект, только если в таблице нет ни одного пользователя, или же обновить поле. Моя реализация:

class UserMobileViewSet(generics.ListCreateAPIView):
    authentication_classes = (authentication.TokenAuthentication,)
    permission_classes = (permissions.IsAuthenticated,)
    queryset = UserMobileDevice.objects.all()
    serializer_class = UserMobileSerializer

    def get_user(self, id):
        try:
            UserMobileDevice.objects.get(user=id)
        except User.DoesNotExist:
            return None



    def create(self, request, *args, **kwargs):
        myModel = None
        id = request.data.get("user")  #id = 52 pk = 2
        print(id)
        if id:
            myModel=self.get_user(id)
            print(myModel)
        if myModel:
            return self.update(request, *args, **kwargs)
        else:
            return self.create(request, *args, **kwargs)

Моя схема таблицы выглядит так:

[
    {
        "id": 1,
        "token": "f5a906ec934425d00fc40e3b260eca2c48965d0a",
        "device_model": "Samsung J6",
        "os": "Android 9",
        "os_version": "9",
        "created_at": "2019-09-12T03:36:11.630303Z",
        "updated_at": "2019-09-12T03:36:13.724340Z",
        "user": 2
    },
  ....
]

Я получаю сообщение об ошибке:

TypeError: get_object () занимает 1Позиционный аргумент, но были заданы 2

Я очень плохо знаком с DRF, Не уверен, как я получу объект из идентификатора. Любое предложение очень поможет !!

1 Ответ

0 голосов
/ 08 ноября 2019

Редактировать: смешанные представления / представления.

Вы можете определить свой собственный, чтобы сделать это.

get_object() не принимает параметров и получает значение, указанное в URL, когда вы используете router для создания своих маршрутов. Типичный URL будет выглядеть как /users/30/, а get_object() вернет User(id=30).

def get_user(self, id):
    # returns null if no match
    return User.objects.filter(pk=id).first() 

def get_user(self, id):
    # catch exception and manually return none
    try:
        User.objects.get(pk=id)
    except User.DoesNotExist:
        return None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...