我正在尝试将文档的各个部分存储在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这一事实有关,因为它们的实例尚未存储,但使用手动事务无法解决问题。
对此有何看法?
干杯, 最大
答案 0 :(得分:0)
尝试在所有对象上执行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 :)
答案 1 :(得分:0)
对象没有id。
所以我要说你需要保存()对象,然后在你的父/子部分引用它(并重新保存部分)。
然而,将prec和next存储为指针的另一个选项是存储sequence_index(间隔10以允许进一步插入而无需重新排序)并按此索引排序。