Я пытаюсь выяснить, как расширить модель User, используя отношение «один к одному» в Django. Я создаю профиль пользователя для хранения дополнительной информации о пользователе. Тем не менее, я новичок в Django и не понимаю, как я обновляю этот профиль пользователя.
Я хочу добавить UserProfileSerializer в файл сериализаторов для обновления профиля, как мне это сделать? И как мне вызвать это в моем файле представлений?
Ближайшая информация, которую я могу найти:
def update_profile(request, user_id):
user = User.objects.get(pk=user_id)
user.profile.bio = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit...'
user.save()
Однако я не понимаю, как я могу ссылаться на user_id через мой класс сериализатора или как я могу пройти через user_id из запроса. Ниже представлен сериализатор и представления модели пользователя, а также модель профиля.
Модель профиля
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
pin = models.CharField(null=True, max_length=4, blank=True)
birth_date = models.DateField(null=True, blank=True)
security_question_1 = models.CharField(null=True, max_length=100, blank=True)
security_question_2 = models.CharField(null=True, max_length=100, blank=True)
security_question_3 = models.CharField(null=True, max_length=100, blank=True)
# post_save is the signal received when a save event occurs in the User model
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
Класс сериализатора пользователя
class UserSerializer(serializers.ModelSerializer):
username = serializers.CharField(max_length=30,
validators=[UniqueValidator(queryset=User.objects.all())]
)
password = serializers.CharField(min_length=8, write_only=True)
def create(self, validated_data):
first_name = serializers.CharField(max_length=30, allow_blank=False)
last_name = serializers.CharField(max_length=30, allow_blank=False)
user = User.objects.create_user(validated_data['username'],
validated_data['username'],
validated_data['password'],
)
user.first_name = validated_data['first_name']
user.last_name = validated_data['last_name']
user.save()
return user
cards = serializers.PrimaryKeyRelatedField(many=True, allow_null=True, queryset=Card.objects.all())
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'password', 'cards']
Представление пользователя
class UserCreate(APIView):
# Creates the user
def post(self, request, format='json'):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
user = serializer.save()
if user:
token = Token.objects.create(user=user)
json = serializer.data
json['token'] = token.key
return Response(json, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Любая помощь очень ценится, я изо всех сил. Спасибо!