Django Serializer ничего не вставляет в базу данных (без ошибок)

Как я указал в заголовке, в мою базу данных ничего не вставляется, хотя другие поля вставляются. Моя цель состоит в том, чтобы принять json запрос на пост:

{
    "user": "0",
    "total_price":29.60,
    "type":"PENDING",
    "products": [{
        "id_product":"0"
        },{
        "id_product":"1"
        },
        {
        "id_product":"3"
        }
        ]

}

Я беру этот пост-запрос и пропускаю его через свой сериализатор, чтобы сохранить его в своей базе данных. поле products в json - это "список внешних ключей, указывающих на первичный ключ в модели Products.

".
My models.py

from django.db import models

# Create your models here.

class Users(models.Model):
    user_id = models.CharField(max_length=10, primary_key=True, default="")
    first_name = models.CharField(max_length=30,default="")
    last_name = models.CharField(max_length=30,default="")
    profile_image = models.ImageField(upload_to='users', default='./images/no-account-image.jpg')
    email = models.CharField(max_length=50, unique=True,default="") 

    def __str__(self):
        return self.user_id

class Products(models.Model):

    CATEGORY = (
        ('SHIRT','Shirt'),
        ('PANTS','Pants'),
        ('SHORTS','Sorts'),
        ('JACKET', 'Jacket'),
        ('BEANIE', 'Beanie'),
        ('HOODIE', 'Hoodie'),
    )
    product_id = models.CharField(max_length=10, primary_key=True,default="")
    name = models.CharField(max_length=10,default="")
    cost = models.DecimalField(max_digits=6, decimal_places=2,default=0)
    description = models.TextField(max_length=1000,default="")
    category = models.CharField(max_length=10, choices=CATEGORY,default="")
    image = models.ImageField(upload_to='products', default='./images/No_Image_avaliable.jpg')
    products_remaining = models.IntegerField(default=0)

    def __str__(self):
        return self.product_id

class Transactions(models.Model):
    TYPE = (
        ('SHIPPED','Shipped'),
        ('RETURNED','Returned'),
        ('PENDING', 'Pending'),
    )
    transaction_id = models.CharField(max_length=10, primary_key=True,default="")
    user =  models.ForeignKey(Users, on_delete=models.PROTECT,default="",related_name='user')
    total_price = models.DecimalField(max_digits=6, decimal_places=2,default=0.0)
    type = models.CharField(max_length=10, choices=TYPE,null=True,default="")
    products = models.ManyToManyField(Products)

    def __str__(self):
        return self.transaction_id
my views.py

from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from rest_framework.parsers import JSONParser
from django.http.response import JsonResponse
from main.models import Users,Products,Transactions
from main.serializers import UsersSerializer,TransactionsSerializer, ProductsSerializer
from django.core import serializers
from bson import ObjectId
import json

# Create your views here.

@csrf_exempt
def transactionsEndpoint(request):
    if request.method=='GET':
        transactions = Transactions.objects.get(product_id='0')
        transactions_serializer = TransactionsSerializer(transactions,many=True)
        return JsonResponse(transactions_serializer.data,safe=False)
    elif request.method=='POST':
        transactions_data=JSONParser().parse(request)
        print(transactions_data)
        transactions_serializer=TransactionsSerializer(data=transactions_data)
        if transactions_serializer.is_valid():
            transactions_serializer.save()
            return JsonResponse("Added Successfully",safe=False)
        print(transactions_serializer.errors)
        return JsonResponse("Failed to Add",safe=False)
    
@csrf_exempt
def productsEndpoint(request):
    if request.method=='GET':
        products = Products.objects.filter(product_id__exact='1')
        products_serializer = ProductsSerializer(products,many=True)
        return JsonResponse(products_serializer.data,safe=False)
    elif request.method=='POST':
        products_data=JSONParser().parse(request)
        products_serializer=ProductsSerializer(data=products_data)
        if products_serializer.is_valid():
            products_serializer.save()
            return JsonResponse("Added Successfully",safe=False)
        print(products_serializer.errors)
        return JsonResponse("Failed to Add",safe=False)

@csrf_exempt
def usersEndpoint(request):
    if request.method=='GET':
        users = Users.objects.all()
        users_serializer = UsersSerializer(users,many=True)
        return JsonResponse(users_serializer.data,safe=False)
    elif request.method=='POST':
        users_data=JSONParser().parse(request)
        users_serializer=UsersSerializer(data=users_data)
        if users_serializer.is_valid():
            users_serializer.save()
            return JsonResponse("Added Successfully",safe=False)
        return JsonResponse("Failed to Add",safe=False)
my serializers.py

from itertools import product
from rest_framework import serializers
from main.models import Users,Products,Transactions

class UsersSerializer(serializers.ModelSerializer):
    class Meta:
        model = Users
        fields=['user_id','first_name','last_name','email']

class ProductsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Products
        fields=['product_id','cost','description','category','products_remaining']

class TransactionsSerializer(serializers.ModelSerializer):
    user = serializers.PrimaryKeyRelatedField(queryset=Users.objects.all())
    products = ProductsSerializer(many=True)
    class Meta:
        model = Transactions
        fields=['user','total_price','type','products']
        depth=1

    def create(self, validated_data):
        product_data = validated_data.pop('products')
        transactions = Transactions.objects.create(**validated_data)
        for product in product_data:
            transactions.products.create(**product)
        return transactions
mysql> SELECT * FROM main_transactions;
+----+-------------+---------+---------+
| id | total_price | type    | user_id |
+----+-------------+---------+---------+
|  1 |       29.60 | PENDING | 0       |
|  2 |       29.60 | PENDING | 0       |
|  3 |       29.60 | PENDING | 0       |
+----+-------------+---------+---------+

Поскольку это отношения "многие ко многим" между продуктами и транзакциями, django создаст отдельную таблицу. Что-то вроде main_transactions_products?

Также, разве поля под продуктами в вашем json-файле не должны называться product_id, а не id_product?

Вернуться на верх