gpt4 book ai didi

Django fixtures 主键错误,需要自然键解决

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

所以我有一个 Film 模型,其中包含多对多领域中的 Actors 模型列表:

class Person(models.Model):
full = models.TextField()
short = models.TextField()
num = models.CharField(max_length=5)

class Film(models.Model):
name = models.TextField()
year = models.SmallIntegerField(blank=True)
actors = models.ManyToManyField('Person')

我正在尝试从 json 装置加载一些初始数据,但是我遇到的问题是加载多对多角色字段。
例如我得到错误:

反序列化错误:[u"'Anna-Varney' 值必须是整数。"]

使用这些装置:
  {
"pk": 1,
"model": "data.Film",
"fields": {
"actors": [
"Anna-Varney"
],
"name": "Like a Corpse Standing in Desperation (2005) (V)",
"year": "2005"
}

而我的 Actor 装置看起来像这样:
 {
"pk": 1,
"model": "data.Person",
"fields": {
"full": "Anna-Varney",
"num": "I",
"short": "Anna-Varney"
}
}

所以多对多字段必须使用 pk 整数,但问题是数据没有排序,对于一长串 Actor ,我认为手动查找每个人的 pk 是不切实际的。我一直在寻找解决方案,似乎我必须使用自然键,但我不确定如何将这些应用于我的模型。

编辑:我已将模型更改为:
class PersonManager(models.Manager):
def get_by_natural_key(self, full):
return self.get(full=full)

class Person(models.Model):
objects = PersonManager()
full = models.TextField()
short = models.TextField()
num = models.CharField(max_length=5)
def natural_key(self):
return self.full

但我仍然遇到同样的错误

最佳答案

输入和 natural_key 都有问题方法。

Documentation: Serializing Django objects - natural keys指出:

A natural key is a tuple of values that can be used to uniquely identify an object instance without using the primary key value.



natural_key方法应该返回一个元组
def natural_key(self):
return (self.full,)

序列化输入还应包含自然键的元组/列表。
{
"pk": 1,
"model": "data.film",
"fields": {
"actors": [
[
"Matt Damon"
],
[
"Jodie Foster"
]
],
"name": "Elysium",
"year": 2013
}
}

关于Django fixtures 主键错误,需要自然键解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18167683/

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