У меня есть ApiRest с двумя связанными таблицами, и я хочу показать данные в Json как документацию, которую я публикую в сериализаторах Image.
Вот мой проект:
это мой Model.py я связал Movimientos с таблицей Productos
class Movimientos(models.Model):
Id = models.AutoField(primary_key=True)
Total = models.IntegerField()
Modo_Stock = models.IntegerField()
Modo_Ventas = models.IntegerField()
Fecha = models.DateField()
Hora = models.CharField(max_length=60)
Cantidad = models.IntegerField()
Importe = models.IntegerField()
Descripcion = models.CharField(max_length=255)
Prod = models.ManyToManyField(Productos)
# Caja = models.ForeignKey(Cajas, on_delete=models.CASCADE)
class Meta:
ordering = ('Fecha',)
это мой Сериализаторы , как и документация, которую я создаю .create ()метод, но он не работает
class ProductosSerializer(serializers.ModelSerializer):
class Meta:
model = Productos
fields = '__all__'
class MovimientosSerializer(serializers.ModelSerializer):
Prod = ProductosSerializer(many=True)
class Meta:
model = Movimientos
fields = '__all__'
def create(self, validated_data):
Prod_data = validated_data.pop('Prod')
mov = Movimientos.objects.create(**validated_data)
for pro_data in Prod_data:
Productos.objects.create(mov=mov, **pro_data)
return mov
мои просмотров и URL
class MovimientosList(generics.ListCreateAPIView):
queryset = Movimientos.objects.all()
serializer_class = MovimientosSerializer
class MovimientosDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Movimientos.objects.all()
serializer_class = MovimientosSerializer
class MovimientosListSearch(generics.ListCreateAPIView):
search_fields = ['Descripcion']
filter_backends = (filters.SearchFilter,)
queryset = Movimientos.objects.all()
serializer_class = MovimientosSerializer
def consulta(request, desde, hasta):
if request.method == 'GET':
resultados = serializers.serialize('json', Movimientos.objects.filter(Fecha__range=[desde, hasta]))
return HttpResponse(resultados)
Urls.py
path('movimientos/', mov_views.MovimientosList.as_view(), name='movimientos'),
path('movimientos/<int:pk>/', mov_views.MovimientosDetail.as_view()),
path('movimientos/search/', mov_views.MovimientosListSearch.as_view()),
path('movimientos/entrefechas/<str:desde>/<str:hasta>/', mov_views.consulta),
ИОшибка POST POST - Ошибка
JSON:
{
"Id": 1,
"Total": 233,
"Modo_Stock": 2,
"Modo_Ventas": 2,
"Fecha": "2019-11-01",
"Hora": "15:23:00",
"Cantidad": 34,
"Importe": 233,
"Descripcion": "Venta",
"Prod": [
{
"Id": 1,
"Codigo_Barra": "12342352",
"Codigo_Producto": "324234",
"Descripcion": "Cervezas",
"Precio_Compra": 80,
"Precio_Venta": 130,
"Stock_Actual": 58
}
]
}
raise TypeError("%s() got an unexpected keyword argument '%s'" % (cls.__name__, kwarg))
TypeError: Productos() got an unexpected keyword argument 'mov'
[09/Nov/2019 09:57:31] "POST /movimientos/ HTTP/1.1" 500 17510
Я хочу показать json как документацию, но я не могу сделать POST,
Я думаю, что именно функция .create () вызывает проблемы.