Постинг изображений для userProfile django

Я смог автоматически создать профиль пользователя при каждом создании пользователя, но я хочу иметь возможность изменять некоторые поля в профиле пользователя.

Так что мой Model.py

def upload_path(instance,filename):
      return 'users/avatars/{0}/{1}'.format(instance.user.username, filename)

class UserProfile(models.Model):
      user= models.OneToOneField(User,on_delete=models.CASCADE, related_name='userprofile')

      Profileimage= models.ImageField(upload_to=upload_path, blank=True, null=True, default='user/avatar.jpeg')
      def __str__(self):
          return self.user.username

@ receiver(post_save,sender=User)
def create_user_profile(sender,instance,created,**kwargs):
     if created:
         UserProfile.objects.create(user=instance)

Мой Serializer.py

class UserSerializer(serializers.ModelSerializer):
    #ProfileImage=serializers.ImageField(allow_null=True, use_url=True)
    class Meta:
        model = User
        fields =['id', 'username','password','email']
        extra_kwargs={'password':{'write_only':True, 'required':True}}

    def create(self,validated_data):
        user =User.objects.create_user(**validated_data)
        Token.objects.create(user=user)
        return user

class UserProfileSerializer(serializers.ModelSerializer):
    user = serializers.StringRelatedField(read_only=True)
    class Meta:
        model =models.UserProfile
        #lookup_field = 'username'
        fields= ['id','user','Profileimage']

Мой view.py

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    lookup_field = 'username'


class UserProfileViewSet(viewsets.ModelViewSet):
    
    queryset = UserProfile.objects.all()
    serializer_class = UserProfileSerializer
    lookup_field = "username"

Как я могу изменить фотографию пользователя, я пытался добавить формы, но я не мог соответствовать имени пользователя, иногда я получаю ошибку Userprofile не имеет пользователя. Помогите?

После замены

    user= models.OneToOneField(User,on_delete=models.CASCADE, related_name='userprofile')

to:

     user = models.ForeignKey(User, on_delete=models.CASCADE) 

Я мог бы обновить картинку, но теперь я создаю несколько пользовательских профилей с одинаковыми именами. Я мог бы добавить поле с created at и всегда искать последний добавленный файл, но я хочу что-то более чистое и прямое. Есть помощь? Изображение прилагается

[enter image description here][1]
Вернуться на верх