Так у меня есть этот класс:Как добавить дополнительные данные перед проверкой/сохранением сериализатора в DRF?
class MyClass(models.Model):
name = models.CharField(max_length=100)
created_time = models.DateTimeField(auto_now_add = True)
modified_time = models.DateTimeField(auto_now = True)
, а затем другой класс, представляющий соответствующие фотографии MyClass:
class MyPhoto(models.Model):
myclass = models.ForeignKey(MyClass, unique=False, related_name='photos')
photo = models.ImageField(upload_to='photos',blank=False)
Я хотел бы создать конечную точку, которая будет обрабатывать загруженные фотографии (тип контента будет многочастному и идентификатор associted MyClass будут переданы в URL), так это то, что у меня есть:
urls.py:
router = routers.DefaultRouter()
router.register(r'photos/(?P<myclass_id>\d+)',PhotoViewSet)
Viewset:
class PhotoViewSet(CreateModelMixin,
viewsets.GenericViewSet):
queryset = MyPhoto.objects.all()
serializer_class = serializers.PhotoAlterSerializer
parser_classes = (parsers.MultiPartParser,)
def create(self, request, *args,**kwargs):
myclass = MyClass.objects.get(pk=kwargs['myclass_id'])
serializer = serializers.PhotoAlterSerializer(data=request.data,context={'request': request})
if serializer.is_valid(raise_exception=True):
photo=serializer.save(myclass=myclass)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
и сериализатору:
class PhotoAlterSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = MyPhoto
fields = ('myclass','photo')
, как вы можете увидеть Im добавление дополнительного MyClass атрибута к serializer.save метода (MyClass = MyClass).
Однако, если я загружаю фотографию и правильно передаю идентификатор myclass в url, я получаю Это поле обязательно для заполнения. ошибка. Если я добавлю правильную гиперссылку на myclass в загруженную многочастную форму с фотографией, запрос пройдет проверку, а затем myclass из формы будет заменен классом myclass, который я получил из идентификатора URL.
Как я могу сделать эту работу, поэтому, если я разместил только фотографию на url http://blabla/api/photos/2, экземпляр этой фотографии и myclass с pk = 2 будет сохранен в db?
Да, вы правы, спасибо вам большое! :) –