繁体   English   中英

Django:manage.py loaddata 正在返回“反序列化错误”

[英]Django: manage.py loaddata is returning 'Deserialization Error'

因此,当我尝试从 cmd 的 my.json 文件将数据加载到我的模型中时,它给了我这个错误: 在此处输入图像描述

'category_id' 似乎有问题,但我不确定我是如何解决这个问题的。

这是我的代码:

商店/models.py

from django.db import models
from django.urls import reverse


# Create your models here.
class Category(models.Model):
    name = models.TextField()  
    products = models.ManyToManyField('Product')

    def get_products(self):
        return Product.objects.filter(category=self)

    def __str__(self):
        return self.name 

    def get_absolute_url(self):
        return reverse('product_list_by_category',args=[self.id])


class Product(models.Model):
    name = models.TextField()
    description = models.TextField()
    stock = models.IntegerField()
    price = models.DecimalField(max_digits=10,decimal_places=2)
    image = models.ImageField(upload_to='images/', blank=True)

    def __str__(self):
        return self.name

商店/views.py

from django.shortcuts import render, get_object_or_404, redirect
from .models import Category, Product
from django.db.models import Count
from django.contrib.auth.models import Group, User
from django.core.paginator import Paginator, EmptyPage, InvalidPage

def product_list(request, category_id=None):
    category = None
    products = Product.objects.all()
    ccat = Category.objects.annotate(num_products=Count('products'))
    if category_id:
        category = get_object_or_404(Category, id=category_id)
        products = products.filter(category=category)
    paginator = Paginator(products, 3)
    try:
        page = int(request.GET.get('page', 1))
    except:
        page = 1
    try:
        products = paginator.page(page)
    except(EmptyPage, InvalidPage):
        products = paginator.page(paginator.num_pages)

    return render(request, 'products.html',
                    {'products': products,
                    'countcat':ccat})

这是我希望加载到我的数据库中的两个.json 文件(值得注意的是 createcategories.json 没有问题)

createcategories.json

[
    {
        "model": "shop.category",
        "pk": 1,
        "fields": {
            "name": "Europe"
        }
    },
    {
        "model": "shop.category",
        "pk": 2,
        "fields": {
            "name": "North America"
        }
    },
    {
        "model": "shop.category",
        "pk": 3,
        "fields": {
            "name": "South America"
        }
    },
    {
        "model": "shop.category",
        "pk": 4,
        "fields": {
            "name": "Asia"
        }
    },
    {
        "model": "shop.category",
        "pk": 5,
        "fields": {
            "name": "Africa"
        }
    },
    {
        "model": "shop.category",
        "pk": 6,
        "fields": {
            "name": "Middle East"
        }
    }
]

I thought that the category_id would get added automatically as a foreign key bu it has not.

Many thanks in advance!


createproducts.json

[
    {
      "model": "shop.product",
      "pk": 1,
      "fields": {
        "category_id":1,
        "name": "Europe Title 1",
        "description": "Europe Description 1",
        "stock": 3,
        "price": 100.00
        }
    },
    {
        "model": "shop.product",
        "pk": 2,
        "fields": {
          "category_id":2,
          "name": "North America Title 1",
          "description": "North America Description 1",
          "stock": 4,
          "price": 7.00
          }
      },
      {
        "model": "shop.product",
        "pk": 3,
        "fields": {
          "category_id":3,
          "name": "South America Title 1",
          "description": "South America Desc 1",
          "stock": 100,
          "price": 2.00
          }
      },
      {
        "model": "shop.product",
        "pk": 4,
        "fields": {
          "category_id":4,
          "name": "Asia Title 1",
          "description": "Asia Desc 1",
          "stock": 50,
          "price": 1.00
          }
      },
      {
        "model": "shop.product",
        "pk": 5,
        "fields": {
          "category_id":5,
          "name": "Africa Title 1",
          "description": "Africa Desc 1",
          "stock": 9,
          "price": 99.00
          }
      },
      {
        "model": "shop.product",
        "pk": 6,
        "fields": {
          "category_id":4,
          "name": "Asia Title 2",
          "description": "Asia Desc 2",
          "stock": 1,
          "price": 50.00
          }
      },
      {
        "model": "shop.product",
        "pk": 7,
        "fields": {
          "category_id":1,
          "name": "Europe Title 2",
          "description": "Europe Desc 2",
          "stock": 2,
          "price": 300.00
          }
      },
      {
        "model": "shop.product",
        "pk": 8,
        "fields": {
          "category_id":4,
          "name": "Asia Title 3",
          "description": "Asia Desc 3",
          "stock": 2,
          "price": 75.00
          }
      },
      {
        "model": "shop.product",
        "pk": 9,
        "fields": {
          "category_id":6,
          "name": "Middle East Title 1",
          "description": "Middle East Desc 1",
          "stock": 1,
          "price": 50.00
          }
      },
      {
        "model": "shop.product",
        "pk": 10,
        "fields": {
          "category_id":6,
          "name": "Middle East Title 2",
          "description": "Middle East Desc 1",
          "stock": 2,
          "price": 15.00
          }
      }
]

而不是createproducts.json中的category_id ,您应该在createcategories.json中有products

我的猜测是,当创建转储时,从ProductCategory存在ForeignKey关系,但现在从CategoryProduct存在ManyToMany关系。

如果您可以在没有类别分配的情况下生活,则可以删除category_id条目。 否则你必须重写这两个文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM