我需要在不使用主键的情况下转储和加载模型对象的固定装置。模型是平的。我了解 Django 中的自然键,花了很多时间阅读文档,但所有文档都有仅使用自然键而不是关系(fk/m2m)的解决方案。这完全不是我需要的。
我需要这样的东西:
(模型.py)
class Template(models.Model):
name = models.CharField(_('name'), max_length=100)
content = models.TextField(_('content'), blank=True)
def natural_key(self):
return (self.name,)
(fixture1.json)
[
{
"pk": null,
"model": "dbtemplates.Template",
"fields" {
"content": "",
"name": "product"
}
}
]
命令之后
./manage.py <SOME_LOADDATA_COMMAND> fixture1.json --natural
我需要更新名称为“product”的模板对象或插入它。
标准 Django 命令不会执行此操作。请帮我解决任何问题。也许有一些库可以做到这一点?我很困惑。
Django 1.6。 Python 2.7
最佳答案
Django 1.6 没有提供使用自然主键转储数据的方法,但 Django 1.7 提供了。
- Django 1.6 文档:https://docs.djangoproject.com/en/1.7/ref/django-admin/#dumpdata-app-label-app-label-app-label-model
- Django 1.7 文档(请注意
--natural-primary
选项):https://docs.djangoproject.com/en/1.7/ref/django-admin/#dumpdata-app-label-app-label-app-label-model
不幸的是,基本 Django 1.6 序列化程序不支持 use_natural_primary_keys
关键字参数:https://github.com/django/django/blob/1.6.11/django/core/serializers/base.py#L20
因此,我建议您要么升级到 django 1.7(我完全理解这并不总是可行),要么编写自己的序列化器,从基本 Django 1.7 序列化器 ( https://github.com/django/django/blob/1.7.11/django/core/serializers/base.py ) 中汲取灵感。
关于python - 如何在 Django 1.6 模型装置中使用某些字段而不是主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39011469/