У меня есть одна модель изображения и модель Resized_Image, в которой я изменю размеры моего исходного изображения на различные размеры и сохраняю их в модели Resized_Image. Когда я пытаюсь отфильтровать данные, они дают повторяющиеся результаты.
Вот моя модель:
class Image(models.Model):
name=models.CharField(max_length=40,unique=True,help_text="name of the image")
status = StatusField()
class Resized_image(models.Model):
img = models.ForeignKey(Image, related_name='images', on_delete=models.CASCADE,)
image=models.ImageField(upload_to=date_format,width_field='width', height_field='height',)
width=models.PositiveIntegerField()
height=models.PositiveIntegerField()
Мой сериализатор:
class resized_imagesSerializer(serializers.ModelSerializer):
class Meta:
model = Resized_image
fields = ('image','width','height')
class imagesSerializer(QueryFieldsMixin,serializers.ModelSerializer):
images =resized_imagesSerializer(many=True,required=False,read_only=True)
image = Base64ImageField(write_only=True,)
class Meta:
model = Image
fields = ('id','name','image','status','images')
required = ['image']
Мой взгляд:
class ImageListView(mixins.CreateModelMixin,generics.ListAPIView):
queryset = Image.objects.all()
serializer_class = imagesSerializer
def get_queryset(self):
param = self.request.query_params.get("width", None)
queryset = Image.objects.order_by(*param)
return queryset
Мой результат без фильтрации:
{
"id": 1,
"name": "abc",
"status": 0,
"images": [
{
"id": 1,
"image": "/images/photos/2019/04/29/14b77119-5d7.png",
"width": 720,
"height": 200
},
{
"id": 2,
"image": "/images/photos/2019/04/29/Movies/medium/14b77119-5d7.png",
"width": 720,
"height": 1280
}
]
}
Здесь, когда у меня есть несколько изображений с различными изображениями с измененным размером, если я пытаюсь упорядочить по ширине, я получаю повторяющиеся результаты (изображение с идентификатором 1 повторяется дважды) Как сделать group_by для упорядоченного набора запросов с помощью Django.
Я использовал аннотирование, но это также дает тот же результат.
Image.objects.order_by(*ordering).annotate(Count('id'))