我最近开始使用django + python进行开发,一切都非常顺利,直到我陷入一个可能非常简单的问题,但我无法解决我对框架/语言的经验不足。
我通过HTTP请求接收JSON对象,其中包含一些数据和2张图片。在这2张照片之前,我想从其中一张照片中保存一个缩略图,但是我还没有看到完成这项任务。我可以轻松保存所有数据,包括2张图像。但我无法找到一种方法来生成一种在数据库中也有这种方式的方法,以及我想要的文件夹结构。
我的文件夹应如下所示:
pictures
user
originals
processed
thumbnails
otherUser
originals
processed
thumbnails
我的目标是:接收2张图片,从其中一张创建缩略图,然后将所有3张图片保存在3个单独的文件夹和数据库的路径中。
这是我的模型代码的样子。
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',)
查看代码...
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
我已尝试过很多东西,比如easy_thumbnails,sorl_thumbnail,以及一些预制的方法,但是我无法找到针对我所做的事情的解决方案。想。
非常感谢!
答案 0 :(得分:1)
看起来你对SomeDataSerializer
的定义有误。在模型SomeData
字段original_image中定义为ImageField
,但在序列化程序中,它只是Field
,而不是ImageField。您应该使用正确的字段类型:
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')
...