Как сохранить данные модели загрузок для пользователя, который вошел в систему, DjangoRestFramework
Я хочу разместить данные {фотографии и подписи} и хочу, чтобы они сохранялись для пользователя, который вошел в систему. Я получаю эту ошибку 'Got a TypeError when calling Uploads.objects.create(). Это может быть связано с тем, что в классе сериализатора есть поле, доступное для записи, которое не является допустимым аргументом для Uploads.objects.create(). Возможно, вам нужно сделать поле доступным только для чтения или переопределить метод UploadsSerializer.create(), чтобы правильно обработать это.'
В serializer.save() я поместил в качестве аргумента user = request.user, но это просто дает мне ошибку, упомянутую выше. Помещение этого аргумента работало в других проектах, но у меня возникают проблемы, и я не понимаю, почему даже с ошибкой.
Serializer.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = [ 'username', ]
class ProfileSerializer(serializers.ModelSerializer):
user = models.OneToOneField(User, on_delete = models.CASCADE, null = False, blank = True)
class Meta:
model = Profile
fields = [ 'first_name', 'last_name', 'phone_number', 'bio', 'profile_picture', 'banner_picture' ]
def to_representation(self, instance):
my_fields = {'first_name', 'last_name', 'bio'}
data = super().to_representation(instance)
for field in my_fields:
try:
if not data[field]:
data[field] = ""
except KeyError:
pass
return data
class UploadsSerializer(serializers.ModelSerializer):
caption = serializers.CharField()
file = serializers.URLField()
id = serializers.IntegerField(read_only = True)
class Meta:
model = Uploads
fields = ['id', 'file', 'caption']
Views.py
elif request.method == 'POST':
serializer = UploadsSerializer(data = request.data)
if serializer.is_valid(raise_exception = True):
serializer.save(user = request.user //I thought this would save to the user but gives error mentioned above
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)