【发布时间】:2012-01-23 00:17:32
【问题描述】:
诚然,这与我之前问过的this one 非常相似,但是,如果能得到答案,那就太好了。
我想通过使用主键来填充另一个字段来创建一个实例。 Yuji Tomita 提出了一个使用两个查询的解决方案(顺便说一句,它工作得很好),但我想知道是否可以只使用一个查询来完成。
富田裕二的解决办法:
def save(self, *args, **kwargs):
add = not self.pk
super(MyModel, self).save(*args, **kwargs)
if add:
self.identification = str(self.id)
kwargs['force_insert'] = False # create() uses this, which causes error.
super(MyModel, self).save(*args, **kwargs)
提前致谢。
【问题讨论】:
-
如何在 SQL 插入期间引用自动生成的 ID? 可能有助于解决这个问题。观看!
-
为什么需要单独存储“标识”?
-
@Yuji:是的,这将是一个很好的重申。
-
@Thomas 说来话长,但假设我想利用 Django 的 id 字段的自动增量功能。如果您要问我正在寻找的最终结果,那是 Joomla 的嵌套 cmets(1、2、... 用于父母,1.1、1.2 用于 1 的孩子,1.1.1 等用于孩子的孩子)。标识包含这些字符串。
-
据我所知,对于使用原始 SQL(以及其中的麻烦),您不能对此代码进行少于 2 次查询。但是,如果您希望嵌套 cmets 轻松工作,我建议使用 django-treebeard 来管理层次结构。