Как создать отдельный POST-запрос для поля изображения в DRF

Мне нужно сделать отдельный api для imagefile. Как я могу этого добиться??? models.py

class Organization(models.Model):
    code = models.CharField(max_length=25, null=False, unique=True)
    name = models.CharField(max_length=100, null=False)
    location = models.ForeignKey(Location, on_delete=models.RESTRICT)
    description = models.TextField()
    total_of_visas = models.IntegerField(null=False, default=0)
    base_currency = models.ForeignKey(Currency, on_delete=models.RESTRICT)
    logo_filename = models.ImageField(upload_to='uploads/')

serializers.py

class OrganizationSerializer(serializers.ModelSerializer):
    location = serializers.CharField(read_only=True, source="location.name")
    base_currency = serializers.CharField(read_only=True, source="base_currency.currency_master")
    location_id = serializers.IntegerField(write_only=True, source="location.id")
    base_currency_id = serializers.IntegerField(write_only=True, source="base_currency.id")

    class Meta:
        model = Organization
        fields = ["id", "name", "location", "mol_number", "corporate_id", "corporate_name",
                  "routing_code", "iban", "description", "total_of_visas", "base_currency", "logo_filename",
                  "location_id", "base_currency_id"]

    def validate(self, data):
        content = data.get("content", None)
        request = self.context['request']
        if not request.FILES and not content:
            raise serializers.ValidationError("Content or an Image must be provided")
        return data

    def create(self, validated_data):
        ....

    def update(self, instance, validated_data):
        ....
        

views.py

class OrganizationViewSet(viewsets.ModelViewSet):
    queryset = Organization.objects.all()
    serializer_class = OrganizationSerializer
    lookup_field = 'id'

urls.py

router = routers.DefaultRouter()
router.register('organization', OrganizationViewSet, basename='organization')
urlpatterns = [
    path('', include(router.urls)),
]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

У меня нет идеи, как сделать post запрос для поля image из postman? Я тут долго мучаюсь. Любая помощь приветствуется,...

если вы хотите обновлять поле изображения отдельно, вам просто нужно создать отдельный сериализатор для него

 class OrganizationImageSerializer(serializers.ModelSerializer):
        logo_filename = serializers.ImageField()
        class Meta:
            model = Organization
            fields = ["logo_filename"]

view.py

class OrganizationImageView(generics.UpdateAPIView):# or `generics.RetrieveUpdateAPIView` if you also want to retriev the current one before updating it
    serializer_class = OrganizationImageSerializer
    permission_classes = [IsAuthenticated, ]

    def get_queryset(self):
        queryset = Organization.objects.filter(id=self.kwargs['pk'])
        return queryset

urls.py

from .views import OrganizationImageView

urlpatterns = [
...
 path('update_org/<int:pk>', OrganizationImageView.as_view(), name='OrganizationImageUpdater'),
]
Вернуться на верх