4

我正在运行一个命令将我的数据库内容转储为 json 格式:

python manage.py dumpdata <appname>.<modelname> > file.json

但是,它并没有转储我的多对多字段,即category_id. 事实上,它正在倾倒它,但该领域始终是空的。为什么??

我曾尝试直接调用该表(这是一个类别映射),如下所示:

python manage.py dumpdata <appname>.<modelname_category_id> > file.json

我收到以下错误:

Error: Unable to serialize database: Category matching query does not exist.

我正在使用 Django 1.2.1 和 SQLite 后端。

有什么提示吗?

更新:我尝试删除 modelname.category_id 表中的所有行,即使只有一行我仍然会收到此错误。

该表定义如下 id: integer PRIMARY KEY unipart_id: integer category_id: integer

并且 unipart_id 和 category_id 字段都有效且存在。

4

3 回答 3

2

我有两张如下表,

from django.db import models


class AggregationCategories(models.Model):
    name = models.CharField(max_length=50)

    class Meta:
        db_table = "AggregationCategories"


class AggregationFunctions(models.Model):
    name = models.CharField(max_length=50)
    aggregation_category = models.ManyToManyField(
        AggregationCategories,
        related_name='aggregationfunctions_aggregationcategories'
    )

    class Meta:
        db_table = "AggregationFunctions"

当您创建多对多关系时,您将获得额外的表结构<model name>_<filed name>。所以根据我的例子model nameisAggregationFunctionsfield nameis aggregation_category。基于此,我的附加表应该是AggregationFunctions_aggregation_category. 是的,您可以在下图中看到所有三个表格。

在此处输入图像描述

因此,您可以像这样将数据转储到第三个表中,python manage.py dumpdata <app name>.<third table name>. 所以 my app nameiscatalogue和 the third table nameis AggregationFunctions_aggregation_category。基于此,我的命令应该是,

python manage.py dumpdata catalogue.AggregationFunctions_aggregation_category

如果你已经使用ManyToManyField.throughManyToManyField.through_fields创建了多对多表,例如(直接取自 Django 官方文档),

from django.db import models


class Person(models.Model):
    name = models.CharField(max_length=50)


class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(
        Person,
        through='Membership',
        through_fields=('group', 'person'),
    )


class Membership(models.Model):
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    inviter = models.ForeignKey(
        Person,
        on_delete=models.CASCADE,
        related_name="membership_invites",
    )
    invite_reason = models.CharField(max_length=64)

现在你有一个Membership多对多关系的类调用,所以你可以像以前一样使用它,

python manage.py dumpdata catalogue.Membership
于 2020-12-04T08:31:02.857 回答
1

我的解决方案:

appname.modelname_id_category
于 2017-09-11T00:33:16.837 回答
0

可能是因为您在 Category 中的外键未填写在某些行中,请查看此网站:http ://wiki.ddenis.com/index.php?title=Django._Error:_Unable_to_serialize_database:_ *_matching_query_does_not_exist。

于 2012-09-27T10:29:09.403 回答