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、previous_section)并通过调用它们的每个保存方法来存储它们。但是,当我在保存后查看表时,没有设置 parent_section_id 和前任部分_id,即使我在保存之前附加了对象。

我认为这与一些 parent_section 实例没有分配 id 的事实有关,因为它们的实例尚未存储,但使用手动事务无法解决问题。

对此有什么想法吗?

干杯,马克斯

4

2 回答 2

0

尝试对所有对象执行 save(),然后更新它们的关系,然后再次 save() 所有对象。

当您分配外键时,将复制相关(目标)对象的 id。因为在分配关系(parent_section,previous_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 回答