首页 > 解决方案 > 调用“Productos.objects.create()”时出现“TypeError”

问题描述

我正在制作一个名为 product 的表的序列化程序,它从另一个名为 category 的表中引入外部数据。最后一个工作正常,显示、添加、编辑和删除。

但是在向产品添加数据时出现以下错误:

Got a `TypeError` when calling `Productos.objects.create()`. This may be because you have a writable field on the serializer class that is not a valid argument to `Productos.objects.create()`. You may need to make the field read-only, or override the ProductosSerializers.create() method to handle this correctly.

这是 products.py 的模型

从 django.db 导入模型 从 .categoria 导入 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, default="productos/default.png" , null=True,blank=True)
    stock = models.IntegerField(default=0)
    precio_compra = models.DecimalField(max_digits=10, decimal_places=2)
    precio_venta = models.DecimalField(max_digits=10, decimal_places=2)
    venta = models.IntegerField(default=0)
    fecha = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.producto

这是 productserializer.py 的序列化程序

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": "https://sistema-control-inventario.herokuapp.com"+productos.imagen.url ,
            "stock": productos.stock,
            "precio_compra" : productos.precio_compra,
            "precio_venta": productos.precio_venta,
            "venta": productos.venta,
            "fecha": format(productos.fecha,'%Y-%m-%d %H:%M:%S'),
            "Categorias":{
                "id_categoria": categorias.id_categoria,
                "categoria": categorias.categoria,
            }
        }

这是 productovista.py 的视图

from rest_framework import viewsets
from backend.models.productos import Productos
from backend.models.categoria import Categoria
from backend.serializers.ProductosSerializers import ProductosSerializers

from backend.serializers.CategoriaSerializers import Categoriaserializers


class ProductoCreateView(viewsets.ModelViewSet):
    queryset = Productos.objects.all().order_by('id_productos')
    serializer_class = ProductosSerializers 

最后通过邮递员通过以下方式发送请求帖子

{

        "id_producto": 45,
        "codigo": 121,
        "producto": "123",
        "stock": 10,
        "precio_compra": "1200000.0",
        "precio_venta": "1000000.0",
        "venta": 0,
        "id_categoria" : 9,
        "Categorias": {
            "categoria": "as"
        }   
}

在此处输入图像描述

有谁知道如何解决这个错误,以便我可以正确添加产品,尊重 to_representation 以便在前端工作时能够使用这些数据?

非常感谢你。:D

标签: django-rest-framework

解决方案


推荐阅读