Как установить значение поля 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)