私はdjango/pythonでウェブサイトを構築しています。私が構築している Web サイト データベースには書籍が含まれており、フィクスチャで関係を定義することにより、Character オブジェクトを Event オブジェクトに関連付けようとしています。を使用して .json ファイルからフィクスチャをロードします
loaddata fixtures <file>
これは、関係のないモデルでは機能しますが、多対多の関係を含むフィクスチャをロードしようとすると (文字は多くのイベントに表示され、イベントには多くの文字が含まれます)、次のようになります:
ValueError: フィクスチャのインストールに問題があります: <ファイル パス>: "< Character: Lanoree Brock > " は、この多対多の関係を使用する前に、フィールド "character" の値を持っている必要があります。
Character のモデルに「character」フィールドがありません。
class Character(models.Model):
id = models.IntegerField(primary_key = True)
name = models.CharField(max_length = ml)
bio = models.TextField()
event = models.ManyToManyField(Event)
def __str__(self):
return self.name
class Meta:
ordering = ('name',)
Character フィクスチャの .json ファイルは次のようになります。
[{"model": "library.Character", "id": 1,
"fields": {"name": "Lanoree Brock", "bio": "He lived", "event": [101, 102, ...]}}
... ]
したがって、エラーは最初の文字で発生します。問題についての私の推測では、django はオブジェクトを保存する前に < Character: Lanoree Brock > オブジェクトに関係を追加しようとしますが、なぜそれを行っているのか、またはそれを回避する方法がわかりません。
コードがその関係を定義しようとする前に、フィクスチャがロードされたときに各オブジェクトが作成/保存されるようにフィクスチャを構築する方法はありますか?
私は一般的にdjango、JSON構文、およびWeb開発に不慣れであり、ここで行っていない単純なことがあるように感じます-フィクスチャが多対多の関係を処理できない場合、それは機能の大きな見落としのようです.
どんな助けでも大歓迎です、ありがとう!
編集:完全なエラーログ:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "c:\Users\MetalGearSamus\Anaconda\lib\site-packages\django\core\managemen
t\__init__.py", line 353, in execute_from_command_line
utility.execute()
File "c:\Users\MetalGearSamus\Anaconda\lib\site-packages\django\core\managemen
t\__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "c:\Users\MetalGearSamus\Anaconda\lib\site-packages\django\core\managemen
t\base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "c:\Users\MetalGearSamus\Anaconda\lib\site-packages\django\core\managemen
t\base.py", line 399, in execute
output = self.handle(*args, **options)
File "c:\Users\MetalGearSamus\Anaconda\lib\site-packages\django\core\managemen
t\commands\loaddata.py", line 60, in handle
self.loaddata(fixture_labels)
File "c:\Users\MetalGearSamus\Anaconda\lib\site-packages\django\core\managemen
t\commands\loaddata.py", line 100, in loaddata
self.load_label(fixture_label)
File "c:\Users\MetalGearSamus\Anaconda\lib\site-packages\django\core\managemen
t\commands\loaddata.py", line 158, in load_label
obj.save(using=self.using)
File "c:\Users\MetalGearSamus\Anaconda\lib\site-packages\django\core\serialize
rs\base.py", line 204, in save
setattr(self.object, accessor_name, object_list)
File "c:\Users\MetalGearSamus\Anaconda\lib\site-packages\django\db\models\fiel
ds\related_descriptors.py", line 480, in __set__
manager = self.__get__(instance)
File "c:\Users\MetalGearSamus\Anaconda\lib\site-packages\django\db\models\fiel
ds\related_descriptors.py", line 468, in __get__
return self.related_manager_cls(instance)
File "c:Users\MetalGearSamus\Anaconda\lib\site-packages\django\db\models\fiel
ds\related_descriptors.py", line 751, in __init__
(instance, self.source_field_name))
ValueError: Problem installing fixture 'c:Users\MetalGearSamus\Personal\Legends\website\library\fixtures\database.json': "<Character: Lanoree Brock>" needs to
have a value for field "character" before this many-to-many relationship can be
used.