Как обновить поля пользовательской модели пользователя с помощью метода обновления 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()