我正在使用Django 2.2和Python 3.7。我有以下型号。注意“ ManyToMany”地址字段...
class Coop(models.Model):
objects = CoopManager()
name = models.CharField(max_length=250, null=False)
types = models.ManyToManyField(CoopType)
addresses = models.ManyToManyField(Address)
enabled = models.BooleanField(default=True, null=False)
phone = PhoneNumberField(null=True)
email = models.EmailField(null=True)
web_site = models.TextField()
在我的种子文件中,我将数据构造如下。 “地址”列中的“ 1”是数据库中已经存在的地址的主键(MySql 8)...
- model: directory.coop
pk: 1
fields:
name: "1871"
types:
- ['Coworking Space']
addresses:
- [ 1 ]
enabled: True
phone:
email:
web_site: "http://www.1871.com/"
但是,当我尝试加载种子数据时,它死于“ [”'[1]'值,必须为整数。“]:(directory.coop:pk=1)field_value为'[1]' ”错误。以下是完整的跟踪。
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/core/management/base.py", line 364, in execute
output = self.handle(*args, **options)
File "/Users/davea/Documents/workspace/chicommons/maps/web/directory/management/commands/docker_init_db_data.py", line 13, in handle
call_command('loaddata', 'directory/fixtures/seed_data.yaml')
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 148, in call_command
return command.execute(*args, **defaults)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/core/management/base.py", line 364, in execute
output = self.handle(*args, **options)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/core/management/commands/loaddata.py", line 72, in handle
self.loaddata(fixture_labels)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/core/management/commands/loaddata.py", line 114, in loaddata
self.load_label(fixture_label)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/core/management/commands/loaddata.py", line 172, in load_label
for obj in objects:
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/core/serializers/pyyaml.py", line 73, in Deserializer
yield from PythonDeserializer(yaml.load(stream, Loader=SafeLoader), **options)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/core/serializers/python.py", line 125, in Deserializer
raise base.DeserializationError.WithData(e.original_exc, d['model'], d.get('pk'), e.pk)
django.core.serializers.base.DeserializationError: Problem installing fixture '/Users/davea/Documents/workspace/chicommons/maps/web/directory/fixtures/seed_data.yaml': ["'[1]' value must be an integer."]: (directory.coop:pk=1) field_value was '[1]'
构造用于加载多对多主键的YAML数据的正确方法是什么?
您为PK列表使用了错误的YAML格式,可以将多行列表用作:
- model: directory.coop
pk: 1
fields:
name: "1871"
types:
- 1
addresses:
- 1
enabled: True
phone:
email:
web_site: "http://www.1871.com/"
如果您希望使用括号作为列表:
- model: directory.coop
pk: 1
fields:
name: "1871"
types: [1]
addresses: [1]
enabled: True
phone:
email:
web_site: "http://www.1871.com/"
此外,除非为模型定义了primary key
(参考:natural key
),否则您必须使用de https://docs.djangoproject.com/en/3.0/topics/serialization/#natural-keys作为参考(参考)>