Как сохранить данные модели загрузок для пользователя, который вошел в систему, 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)