如何在django restframework中介于第一个和最后一个产品映像集之间
如何在django restframework中介于第一个和最后一个产品映像集之间 我最多有十个产品图像集,在我的情况下,我可以获得第一个和最后一个产品图像集。如何在第一个和最后一个产品图像集之间进行切换。如有任何帮助,将不胜感激。 如何在第一个和最后一个产品图像集之间进行切换 models.py如何在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(
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(很抱歉输入错误):