Django Rest Framework upload_to работает не так, как хотелось бы
Я передаю callable для поля image в моем проекте следующим образом
def profile_picture_path(instance, filename):
"""Path for uploading profile pictures in media directory"""
return f"user/profile_picture/{instance.pk}/{filename}"
class User(AbstractUser):
profile_picture = models.ImageField(_("profile picture"),
upload_to=profile_picture_path,
null=True,
blank=True)
Когда я добавляю пользователя через админ панель, изображение получает правильный путь: user/profile_picture/3/pfp.png
. Проблема возникает, когда я отправляю пост-запрос для регистрации: user/profile_picture/None/pfp.png
# views.py
@api_view(["POST"])
def register_view(request):
"""
Register View which takes only post method.
"""
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# serializers.py
class UserSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
exclude = kwargs.pop("exclude", None)
super().__init__(*args, **kwargs)
if exclude is not None:
for field_name in exclude:
self.fields.pop(field_name)
password = serializers.CharField(write_only=True)
class Meta:
model = User
exclude = ["deleted", "deleted_by_cascade"]
Как я могу исправить это и получить правильный путь для загрузки изображений?
Комментарий от Smit Parmar верен, но он не решает ваш вопрос. Сначала вы должны создать пользователя без изображения. После этого вы можете сохранить пользователя с изображением.
Причина - ваш специальный профиль_путь_изображения.
Если вы можете сохранить изображение не в папке ID пользователя, это работает нормально.