2

私は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.
4

0 に答える 0