Django Natural Key for Fixtures Give Deserialization Error(固定装置的 Django 自然键给出反序列化错误)
问题描述
我在 SO 上看到了一些与此类似的问题,但似乎没有一个能回答我的特定问题.我是 Django 新手,并按照 此页面上的说明指导自己 允许自己使用自然键来加载固定装置.不过,我收到了反序列化错误,因为 Django 想要一个整数作为外键,并且似乎无法将我的自然键映射到说明中所述的整数主键.具体来说,我的相关模型代码是:
I've seen a few similar questions to this on SO, but none seem to answer my particular problem. I'm new to Django and was guiding myself by the instructions at this page to allow myself to use natural keys to load fixtures. Nevertheless, I'm getting Deserialization errors because Django wants an integer for a foreign key and can't seem to map my natural key to an integer primary key as is noted in the instructions. Specifically, my relevant models code is:
class GraphTypeManager(models.Manager):
def get_by_natural_key(self, type):
return self.get(type=type)
class GraphType(models.Model):
type = models.CharField(max_length=100, unique=True)
class GraphManager(models.Manager):
def get_by_natural_key(self, name):
return self.get(name=name)
class Graph(models.Model):
name = models.CharField(max_length=200, unique=True)
type = models.ForeignKey(GraphType)
class LineManager(models.Manager):
def get_by_natural_key(self, name):
return self.get(name=name)
class Line(models.Model):
name = models.CharField(max_length=200, unique=True)
class GraphToLineManager(models.Manager):
def get_by_natural_key(self, line, graph):
return self.get(line=line,graph=graph)
class GraphToLine(models.Model):
line = models.ForeignKey(Line)
graph = models.ForeignKey(Graph)
class Meta:
unique_together = (('line', "graph"),)
我的 YAML 夹具是:
And my YAML fixture is:
- model: graphs_container.GraphType
pk: null
fields:
type: TimeSeries
- model: graphs_container.Graph
pk: null
fields:
name: LikesOverTime
type: [TimeSeries]
- model: graphs_container.Graph
pk: null
fields:
name: UsersOverTime
type: [TimeSeries]
- model: graphs_container.Line
pk: null
fields:
name: NumUsers
- model: graphs_container.Line
pk: null
fields:
name: NumLikes
但是在尝试运行 python manage.py loaddata sample_data.yaml
时,我收到以下错误:
But when trying to run python manage.py loaddata sample_data.yaml
, I get the following error:
DeserializationError: [u"'['TimeSeries']' value must be an integer."]
我做错了什么?
推荐答案
你需要
- 在模型中定义
natural_key
方法 - 拥有一个具有
get_by_natural_key
方法的经理 - 实际附加管理器(
objects=GraphManager()
)
- define
natural_key
method in your models - have a manager with
get_by_natural_key
method - actually attach the managers (
objects=GraphManager()
)
在玩过你的代码之后,我让它工作了:
After playing with your code, I made it work:
class GraphTypeManager(models.Manager):
def get_by_natural_key(self, type):
return self.get(type=type)
class GraphType(models.Model):
type = models.CharField(max_length=100, unique=True)
objects = GraphTypeManager()
def natural_key(self):
return (self.type,) # must return a tuple
class GraphManager(models.Manager):
def get_by_natural_key(self, name):
return self.get(name=name)
class Graph(models.Model):
name = models.CharField(max_length=200, unique=True)
type = models.ForeignKey(GraphType)
objects = GraphManager()
转储数据:
$ bin/django dumpdata index --indent=4 --natural > project/apps/fixtures_dev/initial_data.json
[
{
"pk": 1,
"model": "index.graphtype",
"fields": {
"type": "asotuh"
}
},
{
"pk": 1,
"model": "index.graph",
"fields": {
"type": [
"asotuh"
],
"name": "saoneuht"
}
}
]
bin/django loaddata project/apps/fixtures_dev/initial_data.json
Installed 2 object(s) from 1 fixture(s)
这篇关于固定装置的 Django 自然键给出反序列化错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:固定装置的 Django 自然键给出反序列化错误
基础教程推荐
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- 筛选NumPy数组 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01