Как установить значение поля CustomUser внутри APIView?

У меня есть пользовательская модель пользователя с Integerfield tokens и APIView, который посылает запрос к API GPT-3 OpenAI. Я хочу реализовать функцию, в которой пользователь имеет лимит токенов. Когда в поле пользователя остается менее 0 токенов, APIView GPT3 будет отвечать 400BADREQUEST.

API GPT-3 возвращает количество токенов, использованных пользователем за один запрос, поэтому я хотел "SET" поле токенов этого пользователя внутри APIView следующим образом:

request.user.tokens = request.user.tokens - used_tokens # This line does not work

Это не дает никакой ошибки, но поле tokens пользователя никогда не обновляется. У кого-нибудь есть идеи, как этого добиться?

users/models.py

class User(AbstractUser):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    username = None
    first_name = models.CharField(max_length=100, default="unknown")
    last_name = models.CharField(max_length=100, default="unknown")
    profile_pic = models.CharField(max_length=200, default="unknown")
    premium = models.BooleanField(default=False)
    tokens = models.IntegerField(default=200)

appname/views.py

class GPT3(ApiPremiumMixin, APIView):
    def post(self, request, format=None):
        try:
            response = requests.post(
                url="https://api.openai.com/v1/completions",
                headers={
                    "Authorization": "Bearer " + os.getenv("GPT3_API_KEY"),
                    "Content-Type": "application/json; charset=utf-8",
                },
                data=json.dumps(request.data),
            )
            used_tokens = response.json()["usage"]["total_tokens"]
            print(request.user.tokens)
            request.user.tokens = request.user.tokens - used_tokens # This line does not work
            print(request.user.tokens)
            return JsonResponse(
                response.content.decode("utf8"), status=status.HTTP_200_OK, safe=False
            )
        except requests.exceptions.RequestException:
            Response("Request Failed", status=status.HTTP_400_BAD_REQUEST)
Вернуться на верх