2

I've recently started developing with django + python and everything was going very smooth until I got stuck into a problem that probably is very simple but I can not solve with my inexperience with the framework/language.

I'm receiving an JSON object through an HTTP Request which contains some data and 2 pictures. Prior to those 2 pictures I wanted to save a thumbnail from one of them but I don't see to get that task done. I can save all the data easily including the 2 images. But I can not see to find a way to generate a way an have that in the DB also, as well the folder structure that I want.

My folders should look like:

pictures
   user
      originals
      processed
      thumbnails
   otherUser
       originals
       processed
       thumbnails

My goal is: Receive 2 pictures, create a thumbnail from one of them and them save all 3 pictures in 3 separate folders and the path to the Database.

Here's how my model code looks like.

class SomeData(models.Model):
    owner = models.ForeignKey('auth.User', related_name='canopeo_data')
    adjustments = models.CharField(max_length=10)
    latitude = GeopositionField()
    longitude = GeopositionField()
    notes = models.TextField(null=True, blank=True)
    original_image = models.ImageField(upload_to=original_image, max_length=255, blank=True)
    processed_image = models.ImageField(null=False, upload_to=processed_image, max_length=255)
    thumbnail_image = models.ImageField(null=False, upload_to=thumbnail_image, max_length=255)
    date_time = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ('date_time',)

    def save(self, *args, **kwargs):
        super(SomeData, self).save(*args, **kwargs)

def original_image(self, filename):
    url = "pictures/%s/originals/%s" % (self.owner.username, filename)
    return url


def processed_image(self, filename):
    url = "pictures/%s/processed/%s" % (self.owner.username, filename)
    return url


def thumbnail_image(self, filename):
    url = "pictures/%s/thumbnail/%s" % (self.owner.username, filename)
    return url

Serializer code...

class SomeDataSerializer(serializers.HyperlinkedModelSerializer):
#url = serializers.HyperlinkedRelatedField(view_name='data', format='html')
owner = serializers.Field(source='owner.username')
thumbnail_image = serializers.Field(source='original_image')

class Meta:
    model = SomeData
    fields = ('url', 'adjustments', 'latitude', 'longitude', 'notes', 'original_image', 'processed_image',)

View code...

class SomeDataViewSet(viewsets.ModelViewSet):
queryset = SomeData.objects.all()
serializer_class = SomeDataSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)

def pre_save(self, obj):
    obj.owner = self.request.user

I've tried many things such as easy_thumbnails, sorl_thumbnail, and some pre made methods on how to do it.. but I can't see to find a solution specific for what I've been wanting.

Thank you very much!

1 Answer 1

1

Looks like you have mistake in definition of the SomeDataSerializer. In model SomeData field original_image defined as ImageField, but in serialiser it's just Field, not ImageField. You should use correct field type:

class SomeDataSerializer(serializers.HyperlinkedModelSerializer):
    #url = serializers.HyperlinkedRelatedField(view_name='data', format='html')
    owner = serializers.Field(source='owner.username')
    thumbnail_image = serializers.ImageField(source='original_image')
    ...
Sign up to request clarification or add additional context in comments.

1 Comment

Thank You!! I put my save thumbnail method back and modified the seralizer field. Not the thumbnail is saving properly!!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.