使用自然键的 Django loaddata 未查询正确的外键

2024-04-07

这是我的问题。我正在尝试加载一些与另一个模型具有自然键关系的数据。

我修改了父模型以生成自然键。

我使用以下命令从旧数据库导出数据:

manage.py dumpdata resources.image -n --indent 4 > images.json

然后我尝试使用以下命令导入新数据库:

manage.py loaddata images.json

此时我收到错误:

IntegrityError: Problem installing fixtures: The row in table 'resources_image' 
with primary key '340' has an invalid foreign key: resources_image.voyage_id contains 
a value '41890' that does not have a corresponding value in voyage_voyage.id.

它尝试查询 voyage_voyage.id 而不是 get_by_natural_key 函数中指定的 voyage_voyage.voyage_id。我仔细检查了一下,夹具中的键位于 voyage_id 字段中。下面是我的代码和示例夹具。

父模型:

# for parsing natural key
class VoyageManager(models.Manager):
    def get_by_natural_key(self, voyage_id):
        return self.get(voyage_id=voyage_id)


class Voyage(models.Model):

    # for parsing natural key
    objects = VoyageManager()


    voyage_id = models.IntegerField("Voyage ID (can be empty)", null=True, blank=True)

    # A WHOLE BUNCH OF FIELDS

    # generate natural key
    def natural_key(self):
        return (self.voyage_id)


    class Meta:
        ordering = ['voyage_id',]
        verbose_name = 'Voyage'
        verbose_name_plural = "Voyages"

    def __unicode__(self):
        return "Voyage #%s" % str(self.voyage_id)

儿童型号:

class Image(models.Model):
    voyage = models.ForeignKey(Voyage, null=True, blank=True)

    # MANY OTHER FIELDS

    class Meta:
        verbose_name = "Image"
        verbose_name_plural = "Images"

        ordering = ["date"]

夹具:

{
    "pk": 340, 
    "model": "resources.image", 
    "fields": {
        "category": 56, 
        "voyage": 41890, 
        "date": 1873, 
        "description": "blah blah blah", 
        "language": "  ", 
        "creator": null, 
        "title": "Catherine Zimmermann-Mulgrave, \nc.1873", 
        "source": "blah blah blah", 
        "ready_to_go": true, 
        "file": "images/5AF81DA065049ACE0EC8E236C445F5BC.JPG", 
        "order_num": 0
    }
}

所以这就是我最终想通的

该函数期望输入来自元组:

def get_by_natural_key(self, voyage_id):
        return self.get(voyage_id=voyage_id)

该函数在以下情况下生成元组- 自然的指定了标志

def natural_key(self):
        return (self.voyage_id)

这里的技巧是,当你有一个只有一个元素的元组时,它会恢复到其原始类型(str、int等)以强制单个元素元组,你需要一个尾随“,”,所以解决方法是:

def natural_key(self):
        return (self.voyage_id,)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用自然键的 Django loaddata 未查询正确的外键 的相关文章

随机推荐

  • 解构对象作为函数参数

    不太明白这个参数const Posts以下 我对 Node React 还很陌生 它是解构的参数对象吗 或者它只是作为参数传递的对象 getPosts 和 post 显示为未定义 但我不明白参数对象是从哪里传递到函数中的 完整代码在这里 h
  • Visual Studio 2010:向 2008 生成的 wsdl 添加服务引用

    不生成 app config 在我的团队中有一个人拥有 Visual Studio 2008 他创建了一个 Web 服务 然后我将这个 Web 服务添加到控制台项目中 添加服务引用没有问题 但不会生成有效的 app config 只不过是空
  • 在 R 中对非常小的值使用舍入函数返回零

    有时我必须处理非常低的 p 值并以表格格式呈现它们 R 返回的值可以具有很长的有效数字 即小数点后的数字 现在 由于 p 值无论如何都很低 我倾向于在将它们写入 xls 或 tsv 文件之前缩短它们 只是为了使表格看起来漂亮 我在用R ve
  • docker python 自定义模块未找到

    我是 docker 新手 正在尝试将一个简单的应用程序移至 docker 我可以使用 pip install 导入Python标准模块 但是 我有一些想要使用的自定义 python 实用程序文件 这些文件位于单独的包 utils 中 在我的
  • 无限循环使 TimeManager 失效

    我在 WPF 应用程序中遇到了一个非常棘手的缺陷 需要追踪 错误信息是 无限循环似乎是由重复导致的 在布局 渲染过程中使 TimeManager 无效 堆栈跟踪 就其价值而言 是 在 System Windows Media MediaCo
  • TortoiseSVN无法验证

    在我之前的问题之后 TortoiseSVN无法连接 https stackoverflow com questions 11820835 tortoisesvn cant connect解决了 我又遇到了新的问题 在托管我的 svn 存储库
  • 当我尝试在 Windows PC 上安装 PySide2 时,为什么总是出现错误?

    我一直在尝试安装PySide2在我的电脑上 Windows 10 64bits with Python 3 8已安装 但每次都出现错误 我使用了命令pip install PySide2 它对我不起作用 任何帮助将不胜感激 Error ER
  • Linux 如何知道何时为调用堆栈分配更多页面?

    鉴于以下程序 segfault 顾名思义 将通过访问堆栈下方的 256k 来使程序出现段错误 nofault 然而 逐渐将堆栈推到下方 1m 但永远不会出现段错误 此外 运行segfault after nofault 也不会导致错误 如果
  • Sphinx 文档中使用全局变量标准化链接

    我正在使用 Sphinx 来记录工作项目 我想在整个文档的多个页面上使用指向下载的相同链接 例如 home rst Hi I want you to download my project download blah com downloa
  • Dagster 循环实体的输出和并发处理

    我有一个由两个固体组成的 Dagster 管道 下面是可重现的示例 首先 return some list 输出一些对象的列表 第二个固体 print num 接受第一个列表 不是完整列表 中的元素 并对该元素进行一些处理 我该如何为第一个
  • Rails 视图显示双花括号中的格式输入,例如 {{parameter}} 而不是实际值

    我在使用 Rails 2 3 8 执行以下功能时收到此错误 单词时间距离 shows 还剩 count 天 以及表格错误 Restful 身份验证登录显示无效表单的错误 如下所示 count 个错误禁止保存此 model 以下字段存在问题
  • 更快地循环图像的方法

    有谁知道如何更快地完成这项工作 我可以使用 Lockbits 做同样的事情吗 for int y 0 y lt picture Height y for int x 0 x lt picture Width x Color colorPix
  • 散点图中点的垂直线

    假设我有一组点x以及一组对应的数据y 我现在将这些绘制成散点图 plt scatter x y 我得到的图包含一些由 matplotlib 生成的 x 轴刻度 有没有一种方法可以实现自动勾选 但要添加从 x 轴到散点中的点的垂直线并标记它们
  • 在 Nuget 的构建后获取版本

    Code if ConfigurationName Release cd ProjectDir nuget spec Entities f nuget pack DeusPak Entities csproj Prop Configurat
  • Eclipse 图形布局不显示任何内容

    I am doing a mobile application on Eclipse and once I re installed my Android SDK after installation something odd happe
  • Twitter Bootstrap:使表单输入和按钮与 Chrome 和 Firefox 中的高度相同

    Using Twitter 引导程序 2 3 2 http twitter github io bootstrap base css html forms我有一个input append form
  • 操作栏溢出不显示

    我正在为 Sherlock 设置一个带有 3 个项目 图标的操作栏 在 ICS 模拟器上运行时 我只能看到 2 个图标 而且 没有溢出菜单 那三个点图标 如果我按手机的菜单按钮 我只会看到第三个图标 我是否必须强制使用溢出图标 如果是的话我
  • 如何在 Objective-C 中包装 C++ 库?

    我有一个 C 库 仅限 h 其中包含数据结构的实现 我想在我的 iPhone 应用程序中使用它 首先 我用 Objective C 编写了一个包装器作为一个类 通过组合 它具有 C 类的 ivar 然后我 有义务 将包装类扩展更改为 mm
  • Angular 的过滤器问题

    明确地说 我对 Angular 上的过滤器有一个大的小问题 附加过滤器的输入搜索 如果你看到这个例子 这正是我想要的 http plnkr co edit FJ45nV6gdwp3SkRglPeW p preview 实际上 我用我的应用程
  • 使用自然键的 Django loaddata 未查询正确的外键

    这是我的问题 我正在尝试加载一些与另一个模型具有自然键关系的数据 我修改了父模型以生成自然键 我使用以下命令从旧数据库导出数据 manage py dumpdata resources image n indent 4 gt images