указать поле аннотирования в подтаблицах - PullRequest
0 голосов
/ 22 января 2019

У меня есть родительская таблица Image и подтаблица Resized_image, поэтому я сохранил images данные в resized_image таблице.Я хочу отфильтровать данные, используя форматное соотношение.

Это моя модель:

 class Image(models.Model):
        name=models.CharField(max_length=40,unique=False)
 class Resized_image(models.Model):
        img = models.ForeignKey(Image, related_name='images', on_delete=models.CASCADE)
        image=models.ImageField(upload_to=config.date_format,width_field='width', height_field='height',)
        width=models.PositiveIntegerField(null=True, blank=False, editable=False)
        height=models.PositiveIntegerField(null=True, blank=False, editable=False)
        size=models.IntegerField(null=True, blank=False,editable=False)
        status = models.CharField(max_length=30, default='inserted')

        class Meta:
            db_table = 'resized_images'

        def __str__(self):
            return self.status

    def save(self,force_insert=False, force_update=False, using=None):
        if not self.image:
            return  

        super(Resized_image, self).save()
        self.size = os.stat(str(self.image)).st_size
        super(Resized_image, self).save()

Это мое мнение:

class ImagePostAPIView(mixins.CreateModelMixin,generics.ListAPIView):
    queryset = Image.objects.all()
    serializer_class = imagesSerializer

def get(self, request):
        print("inside get views.py")
        return super(mixins.CreateModelMixin,self).get(request)
def myfilter(self, queryset, queryparam, queryarg):
        param = self.request.query_params.get(queryparam, None)
        #print("param",param)
        if param is not None:
            try:
                newarg = {queryarg : int(param)}
                #print("newarg",newarg)
                queryset = queryset.filter(**newarg)
            except ValueError:
                pass
        return queryset
def get_queryset(self):
 queryset = Image.objects.all() 
 queryset = self.myfilter(queryset, 'minheight', 'images__height__gte')
        queryset = self.myfilter(queryset, 'maxheight', 'images__height__lte')

здесь я фильтрую данные вGET запрос с использованием minheight, который присутствует в таблице Resized_image аналогично. Я хочу отфильтровать данные, используя форматное соотношение, т. Е. Хочу добавить поле aspect_ratio, используя table_name.objects.annotate, а затем отфильтровать данные ... Как я могусделать это ??

...