gpt4 book ai didi

python - Django 中带有多对多字段的 Dumpdata

转载 作者:行者123 更新时间:2023-12-04 12:52:29 25 4
gpt4 key购买 nike

我正在运行一个命令将我的数据库内容转储为 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:整数主键
unipart_id:整数
category_id:整数

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

最佳答案

我有两张如下表,

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 nameAggregationFunctionsfield nameaggregation_category .基于此,我的附加表应该是 AggregationFunctions_aggregation_category .是的,您可以在下图中看到所有三个表。
enter image description here
所以你可以像这样转储第三个表中的数据, python manage.py dumpdata <app name>.<third table name> .所以我的 app namecataloguethird table nameAggregationFunctions_aggregation_category .基于这一点,我的命令应该是,
python manage.py dumpdata catalogue.AggregationFunctions_aggregation_category

如果您使用 ManyToManyField.through 创建了多对多表, ManyToManyField.through_fields , 举个例子(直接取自 Django Official Documentation ),
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)
现在你有一个类(class)电话 Membership对于你的多对多关系,所以你可以像以前一样使用它,
python manage.py dumpdata catalogue.Membership

关于python - Django 中带有多对多字段的 Dumpdata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11303817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com