如何在django restframework中介于第一个和最后一个产品映像集之间

如何在django restframework中介于第一个和最后一个产品映像集之间,django,python-3.x,orm,django-rest-framework,Django,Python 3.x,Orm,Django Rest Framework,如何在django restframework中介于第一个和最后一个产品映像集之间 我最多有十个产品图像集,在我的情况下,我可以获得第一个和最后一个产品图像集。如何在第一个和最后一个产品图像集之间进行切换。如有任何帮助,将不胜感激。 如何在第一个和最后一个产品图像集之间进行切换 models.py class Product(models.Model): title = models.CharField(max_length=30) slug= models.SlugField(

如何在django restframework中介于第一个和最后一个产品映像集之间

我最多有十个产品图像集,在我的情况下,我可以获得第一个和最后一个产品图像集。如何在第一个和最后一个产品图像集之间进行切换。如有任何帮助,将不胜感激。

如何在第一个和最后一个产品图像集之间进行切换

models.py

class Product(models.Model):
    title = models.CharField(max_length=30)
    slug= models.SlugField(blank=True, null=True)
    sku = models.CharField(max_length=30)
    description = models.TextField(max_length=200, null=True, blank=True)
    instruction = models.TextField(max_length=200, null=True, blank=True)
    price = models.DecimalField(decimal_places=2, max_digits= 10,)
    discount_price= models.DecimalField(decimal_places=2, max_digits= 10, null=True, blank=True)


    category = models.ManyToManyField('Category', )
    default = models.ForeignKey('Category', related_name='default_category', null=True, blank=True, on_delete=models.CASCADE)

    created_on = models.DateTimeField(default=timezone.now)
    updated_on = models.DateTimeField(null=True, blank=True)
    status = models.BooleanField(default=True)


    class Meta:
        ordering = ["-id"]

    def __str__(self): #def __str__(self):
        return self.title 

    def get_absolute_url(self):
        return reverse("product_detail", kwargs={"pk": self.pk})


    def get_first_image_url(self):
        img = self.productimage_set.first()
        if img:
            return img.image.url
        return img #None


def pre_save_post_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = unique_slug_generator(instance)

pre_save.connect(pre_save_post_receiver, sender=Product)


def image_upload_to(instance, filename):
    title = instance.product.title
    slug = slugify(title)
    basename, file_extension = filename.split(".")
    new_filename = "%s-%s.%s" %(slug, instance.id, file_extension)
    return "products/%s/%s" %(slug, new_filename)


class ProductImage(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    image = models.ImageField(upload_to=image_upload_to)
    created_on = models.DateTimeField(default=timezone.now)
    status = models.BooleanField(default=True)

    def __unicode__(self):
        return self.product.title

views.py


class ProductUpdateDestroyAPIView(generics.RetrieveUpdateDestroyAPIView):
   model = Product
   queryset = Product.objects.all()
   serializer_class = DemoAppProductUpdateDestroySerializer
   permission_classes = [IsAdminUser]
   authentication_classes = [BasicAuthentication]

序列化程序.py

class DemoAppProductUpdateDestroySerializer(serializers.ModelSerializer):

   image = serializers.SerializerMethodField()
   image2 = serializers.SerializerMethodField()
   class Meta:
       model = Product
       fields=[
               "id",
               "title",
               "slug",
               "sku",
               "price",
               "discount_price",
               "image",
               "image2",
       ]

   def get_image(self, obj):
       return obj.productimage_set.first().image.url

   def get_image2(self,obj):
       return obj.productimage_set.last().image.url


您可以在序列化程序中执行此操作:

def get_between_images(self,obj):
       images = obj.productimage_set.all().values_list('image', flat=True)

       return images[1:len(images)-1]

将序列化程序更改为

class DemoAppProductUpdateDestroySerializer(serializers.ModelSerializer):
    images = serializers.SerializerMethodField()

    class Meta:
        model = Product
        fields = [
            "id",
            "title",
            "slug",
            "sku",
            "price",
            "discount_price",
            "images",
        ]

    def get_images(self, obj):
        return [product_image.image.url for product_image in obj.productimage_set.all()]
类DemoAppProductUpdateDestroySerializer(serializers.ModelSerializer):
images=serializers.SerializerMethodField()
类元:
型号=产品
字段=[
“身份证”,
“头衔”,
“鼻涕虫”,
“sku”,
“价格”,
“折扣价”,
“图像”,
]
def get_图像(自身、obj):

返回[product\u image.image.url for product\u image in obj.productimage\u set.all()]
concern:second(),third()。。。不工作。在我的案例中,只有first()和last()起作用。如有任何帮助,将不胜感激。您是否正在尝试获取所有图像URL?是的,有任何建议如何获取所有图像URL@不支持位于/api/product/1/d负索引的ArakkalAbuAssertionError。当我尝试使用另一种方法时,[1:10]会抛出错误“ProductImage类型的/api/product/1/d对象的TypeError不可JSON序列化”,即def get_images(self,obj):。非常感谢你。非常感谢@Arakkal Abu(很抱歉输入错误):