4

ドキュメントのセクションを Django アプリに保存しようとしています。モデルは次のようになります。

class Section(models.Model):
  project = models.ForeignKey(Project)
  parent_section = models.ForeignKey('Section', blank=True, null=True, related_name='child_set')
  predecessor_section = models.ForeignKey('Section', blank=True, null=True, related_name='predecessor_set')
  name = models.CharField(max_length=100)
  text = models.TextField(blank=True, null=True)

たくさんのセクションを作成し、それらをリンクし (parent_section、predecessor_section)、それぞれの保存メソッドを呼び出して保存します。ただし、保存後にテーブルを調べると、保存前にオブジェクトがアタッチされていたにもかかわらず、parent_section_id と predecessor_section_id が設定されていません。

インスタンスがまだ保存されていないため、一部のparent_sectionインスタンスにIDが割り当てられていないという事実に関係していると思いますが、手動トランザクションを使用しても問題を解決できませんでした。

それについて何か考えはありますか?

乾杯、マックス

4

2 に答える 2

0

すべてのオブジェクトに対してsave()を実行してから、それらの関係を更新してから、すべてのオブジェクトを再度save()してみてください。

外部キーを割り当てると、関連する(ターゲット)オブジェクトのIDがコピーされます。リレーション(parent_section、predecessor_section)を割り当てた時点では、関連するオブジェクトにはまだIDがないため、ファンキーな結果が得られます。

A = Section(name='A')
B = Section(name='B')
B.parent_section = A
A.save() 
B.save()
B.parent_section # this will say A
B.parent_section_id # this will say **None**

しかし、これは機能するはずです:

A = Section(name='A')
B = Section(name='B')
A.save() 
B.save()
B.parent_section = A
B.parent_section # this will say A
B.parent_section_id # this will say A.id
B.save() # don't forget this one :)
于 2010-07-29T12:57:32.300 に答える
0

Django ORM に保存するまで、オブジェクトには ID がありません。

したがって、オブジェクトを save() してから、親/子セクションで参照する (そしてセクションを再保存する) 必要があると思います。

ただし、ポインタとして prec と next を格納する別のオプションは、sequence_index (並べ替えなしでさらに挿入できるように 10 間隔) を格納し、このインデックスで並べ替えることです。

于 2010-07-29T13:03:03.100 に答える