django-rest-framework - 调用“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
解决方案
推荐阅读
- ruby-on-rails - 无法读取未定义的 npm ERR 的属性“地图”!代码 ELIFECYCLE npm 错误!errno 1 fir React 前端/Rails 后端
- excel - 在 Excel VBA 中将 TAB 添加到文本字符串的开头
- java - 弹簧靴 | 使用动态密钥库/信任库
- html - 复选框加载但未点击 HTML Angular
- angular - 触发事件时,Angular 下的 Leafletjs 无法访问全局变量
- jquery - 如何在fancybox 3 iframe 中添加额外内容?
- sql - PostgreSQL 创建触发器,它在每次插入或更新表时运行一个函数
- sql - 将列从 integer[] 更新为 jsonb[]
- apache-kafka-streams - Kafka 流 - 尝试从流中过滤数据并写入另一个主题。但返回空
- vue.js - 使用 v-bind:href 绑定表达式