【发布时间】:2021-12-01 06:23:22
【问题描述】:
我正在使用 djangorestFramework,在序列化程序中我有一个图像,当我获取它时告诉我“utf-8”错误:
这是一个模型:
from django.db import models
from .categoria import Categoria
class Productos(models.Model):
def productos_directory_path(instance,filename):
return 'productos/{0}'.format(filename)
id_productos = models.AutoField(primary_key=True)
id_categoria = models.ForeignKey(Categoria, on_delete=models.CASCADE)
codigo = models.IntegerField(default=0)
producto = models.CharField('producto', max_length = 100)
imagen = models.ImageField(upload_to=productos_directory_path, null=True,blank=True)
stock = models.IntegerField(default=0)
precio_compra = models.FloatField(default=0.0)
precio_venta = models.FloatField(default=0.0)
venta = models.IntegerField(default=0.0)
fecha = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.producto
它是一个序列化器
from rest_framework import serializers
from backend.models.productos import Productos
from backend.models.categoria import Categoria
from backend.serializers.CategoriaSerializers import Categoriaserializers
class ProductosSerializers(serializers.ModelSerializer):
#Categorias = Categoriaserializers()
class Meta:
model = Productos
fields = "__all__"
localhost:8000/products 上的这个返回这个:
[
{
"id_productos": 8,
"codigo": 12,
"producto": "Carro",
"imagen": "http://localhost:8000/media/productos/bulgakov-mijail-el-maestro-y-margarita.jpg",
"stock": 0,
"precio_compra": 0.0,
"precio_venta": 0.0,
"venta": 0,
"fecha": "2021-10-12T16:02:06.167755Z",
"id_categoria": 2
}
]
但除此之外,我需要引入产品类别,我是这样做的:
from rest_framework import serializers
from backend.models.productos import Productos
from backend.models.categoria import Categoria
from backend.serializers.CategoriaSerializers import Categoriaserializers
class ProductosSerializers(serializers.ModelSerializer):
Categorias = Categoriaserializers()
class Meta:
model = Productos
fields = "__all__"
#fields = ["id_productos","codigo","producto","imagen","stock","precio_compra","precio_venta","venta","fecha","Categorias"]
def to_representation(self, obj):
productos = Productos.objects.get(id_productos=obj.id_productos)
categorias = Categoria.objects.get(productos=obj.id_productos)
return{
'id_producto': productos.id_productos,
"codigo": productos.codigo,
"producto" : productos.producto ,
"imagen": str(productos.imagen),
"stock": productos.stock,
"precio_compra" : productos.precio_compra,
"precio_venta": productos.precio_venta,
"venta": productos.venta,
"fecha": productos.fecha,
"Categorias":{
"id_categoria": categorias.id_categoria,
"categoria": categorias.categoria,
"fecha": categorias.fecha
}
}
我把这个拿回来了
[
{
"id_producto": 8,
"codigo": 12,
"producto": "Carro",
"imagen": "productos/bulgakov-mijail-el-maestro-y-margarita.jpg",
"stock": 0,
"precio_compra": 0.0,
"precio_venta": 0.0,
"venta": 0,
"fecha": "2021-10-12T16:02:06.167755Z",
"Categorias": {
"id_categoria": 2,
"categoria": "Componentes",
"fecha": "2021-10-11T15:50:24.101968Z"
}
}
]
如您所见,我得到的图像是 ("products/bulgakov-mijail-the-teacher-and-margarita.jpg ) 由
"imagen": str(products.imagen)
我怎样才能像第一个代码sn-p一样获得图像的ulr,并删除str()
提前致谢
【问题讨论】:
-
在您的第一个示例中,您注释掉了一个嵌套序列化程序
Categorias = Categoriaserializers(),这看起来就像您想要的那样,为什么它被注释掉了? -
@IainShelvington 只是为了使第一个代码更清晰,因为在我用于类别的第二个代码中不推荐使用它:D
标签: django