diff --git a/core/drf_api.py b/core/drf_api.py index 7fb30e8..e30e4ae 100644 --- a/core/drf_api.py +++ b/core/drf_api.py @@ -32,6 +32,7 @@ class ImageSerializer(serializers.ModelSerializer): class Meta: model = Image fields = ( + "id", "image", "width", "height", @@ -42,9 +43,9 @@ class ImageSerializer(serializers.ModelSerializer): extra_kwargs = { "width": {"read_only": True}, "height": {"read_only": True}, + "image": {"read_only": True}, } - standard = ThumbnailSerializer(read_only=True) thumbnail = ThumbnailSerializer(read_only=True) square = ThumbnailSerializer(read_only=True) @@ -74,9 +75,12 @@ class PinSerializer(serializers.HyperlinkedModelSerializer): "description", "referer", "image", + "image_by_id", "tags", ) - + extra_kwargs = { + "submitter": {"read_only": True}, + } tags = serializers.SlugRelatedField( many=True, @@ -84,19 +88,22 @@ class PinSerializer(serializers.HyperlinkedModelSerializer): queryset=Tag.objects.all(), slug_field="name", ) - image = ImageSerializer(required=False) + image = ImageSerializer(required=False, read_only=True) + image_by_id = serializers.PrimaryKeyRelatedField( + queryset=Image.objects.all(), + write_only=True, + ) def create(self, validated_data): - image_file = validated_data.pop('image') - if validated_data['url']: + submitter = self.context['request'].user + image = validated_data.pop("image_by_id") + if 'url' in validated_data and validated_data['url']: image = Image.objects.create_for_url( validated_data['url'], validated_data['referer'], ) - else: - image = Image.objects.create(image=image_file['image']) - pin = Pin.objects.create(image=image, **validated_data) tags = validated_data.pop('tag_list') + pin = Pin.objects.create(submitter=submitter, image=image, **validated_data) if tags: pin.tags.set(*tags) return pin @@ -105,8 +112,5 @@ class PinSerializer(serializers.HyperlinkedModelSerializer): tags = validated_data.pop('tag_list') if tags: instance.tags.set(*tags) - image_file = validated_data.pop('image', None) - if image_file: - image = Image.objects.create(image=image_file['image']) - instance.image = image + validated_data.pop('image_id') return super(PinSerializer, self).update(instance, validated_data) diff --git a/core/models.py b/core/models.py index 59ee382..2b8ee09 100644 --- a/core/models.py +++ b/core/models.py @@ -72,9 +72,9 @@ class Image(BaseImage): class Pin(models.Model): submitter = models.ForeignKey(User) - url = models.URLField(null=True) - origin = models.URLField(null=True) - referer = models.URLField(null=True) + url = models.URLField(null=True, blank=True) + origin = models.URLField(null=True, blank=True) + referer = models.URLField(null=True, blank=True) description = models.TextField(blank=True, null=True) image = models.ForeignKey(Image, related_name='pin') published = models.DateTimeField(auto_now_add=True) diff --git a/core/views.py b/core/views.py index cd3f123..4c4b132 100644 --- a/core/views.py +++ b/core/views.py @@ -16,6 +16,9 @@ class ImageViewSet(mixins.CreateModelMixin, GenericViewSet): queryset = Image.objects.all() serializer_class = api.ImageSerializer + def create(self, request, *args, **kwargs): + super(ImageViewSet, self).create(request, *args, **kwargs) + class PinViewSet(viewsets.ModelViewSet): queryset = Pin.objects.all() diff --git a/pinry/static/js/pin-form.js b/pinry/static/js/pin-form.js index 34617f2..a189a82 100644 --- a/pinry/static/js/pin-form.js +++ b/pinry/static/js/pin-form.js @@ -9,6 +9,8 @@ $(window).load(function() { + var api_base = "/api/v2/"; + var uploadedImage = false; var editedPin = null; @@ -99,8 +101,8 @@ $(window).load(function() { } // Drag and drop upload $('#pin-form-image-upload').dropzone({ - url: '/pins/create-image/', - paramName: 'qqfile', + url: api_base + "images/", + paramName: 'image', parallelUploads: 1, uploadMultiple: false, maxFiles: 1,