Постинг изображений для 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]