Python 使用一对一字段作为主键序列化Django模型的自然键
我有一个Python 使用一对一字段作为主键序列化Django模型的自然键,python,json,django,serialization,django-fixtures,Python,Json,Django,Serialization,Django Fixtures,我有一个配方模型和标签模型,该模型使用OneToOneField引用前者。我使用管理器和natural_key方法导出两个带有JSON编码的模型 class RecipeManager(models.Manager): def get_by_natural_key(self, name): return self.get(name=name) class Recipe(models.Model): objects = RecipeManager() n
配方
模型和标签
模型,该模型使用OneToOneField
引用前者。我使用管理器和natural_key
方法导出两个带有JSON编码的模型
class RecipeManager(models.Manager):
def get_by_natural_key(self, name):
return self.get(name=name)
class Recipe(models.Model):
objects = RecipeManager()
name = models.CharField(max_length=255)
def natural_key(self):
return (self.name)
class LabelManager(models.Manager):
def get_by_natural_key(self, recipe):
return self.get(recipe=recipe)
class Label(models.Model):
objects = LabelManager()
recipe = models.OneToOneField(Recipe, primary_key=True)
name = models.CharField(max_length=255)
def natural_key(self):
return self.recipe.natural_key()
natural_key.dependencies = ['labels.recipe']
我使用自然键导出标签
查询集:
with open(l_filename, 'w') as l_file:
serialize('json',
Label.objects.all(),
indent=2,
use_natural_foreign_keys=True,
use_natural_primary_keys=True,
stream=l_file)
一切正常,但是序列化的JSON对象没有字段,它们应该引用Recipe
模型
[{"fields": {"name": null},"model": "labels.label"}]
从1.7开始,Django文档没有给出任何特定于与自然键的一对一关系的提示。
任何建议?配方模型中的名称字段都不是唯一的 自然键必须是唯一的来标识对象。当我们定义自然键时,django在单个唯一字段或多个字段上创建索引,这些字段一起唯一 注:
用于自然关键点的任何字段都必须能够唯一标识对象。这通常意味着您的模型将为自然关键字中的一个或多个字段提供一个unique子句(单个字段上的unique=True,或多个字段上的unique_)。但是,不需要在数据库级别强制执行唯一性。如果您确信一组字段实际上是唯一的,您仍然可以将这些字段用作自然键。您好,欢迎使用Stackoverflow!!如果你能在回答任何问题之前回答,那就太好了。谢谢。@user11190267感谢您尝试回答,但我认为您没有抓住要点:天然钥匙是用配方制作的,标签与配方有一对一的关系。因此,标签名称不起作用。