Как обновить поля пользовательской модели пользователя с помощью метода обновления APIView

Я пытаюсь разработать метод обновления APIView, чтобы я мог изменять поля модели в моей пользовательской модели AbstractUser.

Я читал документацию по APIViews и другие примеры, но большинство из них включали другую модель OneToOne 'profile' как в этом примере и или кодирование сериализатора, который я не думаю, что необходим для модели пользователя (поправьте меня, если я ошибаюсь)

Я не знаю, как реализовать тот же метод обновления для модели пользователя.

Это моя пользовательская модель пользователя. Я пытаюсь обновить поля referred_count и 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", blank=True)
    profile_pic = models.CharField(max_length=200, default="unknown")
    premium = models.BooleanField(default=False)
    referred_count = models.IntegerField(default=0)
    tokens = models.IntegerField(default=0)

    email = models.EmailField(unique=True, db_index=True)
    secret_key = models.CharField(max_length=255, default=get_random_secret_key)

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = []

    objects = UserManager()

    class Meta:
        swappable = "AUTH_USER_MODEL"

users/api.py


class UpdateFields(ApiAuthMixin, ApiErrorsMixin, APIView):
    def update(self, request, *args, **kwargs):
        # update various user fields based on request.data
        # I am not sure what should go inside here.
        return request.user.update(request, *args, **kwargs)

Я хочу отправить из фронтенда что-то вроде следующего, что пройдет через APIView UpdateFields и "исправит" эти пользовательские поля

{
  'tokens': 100,
  'referred_count': 12,
}

users/urls.py

urlpatterns = [
    path("me/", UserMeApi.as_view(), name="me"),
    path("update/", UpdatePremium.as_view(), name="update"),
]

Попробуйте это.

user = request.user
user.tokens = request.data.get('token')
user.referred_count = request.data.get('referred_count')
user.save()
Вернуться на верх