Я хочу, чтобы любой пользователь мог создавать свои собственные продукты с помощью моего RESTful API. Для этого я создал представление, которое наследует ListCreateAPIView. Проблема в том, что пользователь должен создавать только те продукты, которыми он владеет, поэтому при создании экземпляра модели продукта я хотел, чтобы поле «Владелец» соответствовало аутентифицированному пользователю.
Вот моя модель продукта
class Product(models.Model):
owner = models.ForeignKey(User)
name = models.CharField(max_length=30)
Очевидно, мой сериализатор:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = models.Product
и мой взгляд:
class ProductView(generics.ListCreateAPIView):
queryset = models.Product.objects.all()
serializer_class = serializers.ProductSerializer
permission_classes = (IsAuthenticatedOrReadOnly,)
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
#serializer.initial_data['owners'] = models.Person.objects.get(user__email=request.user).user_id
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
Как видите, я попытался изменить «initial_data», но это неизменяемый QueryDict. Другой вариант - преобразовать его в словарь Python, а затем добавить значение «владелец», но при этом я получаю каждое значение в виде списка (т.е. {'name': ['MyName']}), так что это было бы очень уродливый способ решить проблему, я думаю, что это должно быть более простое решение.