Django:通用外键dumpdata:无法解析依赖项

时间:2012-12-24 12:54:52

标签: django generics foreign-key-relationship natural-key dumpdata

我使用通用外键将不同的配置文件与继承自Users的{​​{1}}模型相关联。虽然通过了auth.User选项,但我无法执行dumpdata。它说,

错误:无法解析序列化应用列表中myproject.AdminProfile,myproject.TeacherProfile,myproject.Users的依赖项。

根据documentation,据说我们需要实施natural_key methods来获取和闪现涉及通用关系的装置。我怎么能用我在这里展示的模型呢?

--natural

使用Django 1.4.3和Postrgres。

2 个答案:

答案 0 :(得分:7)

您的问题似乎与缺乏自然关键方法无关。我使用SQLite在Django 1.4和1.2.5上测试了[原始]代码,并且能够使用自然键转储数据而没有错误。

经过一些搜索后,我发现当模型之间存在循环依赖关系(包括具有自引用的模型)时会出现此问题。正如您的更新代码所示,Users模型中存在自引用,因此问题就在于此。这个错误是在Django 1.3中引入的,尽管是already fixed,但它在稳定版本中仍然不可用AFAIK(测试高达1.4.3)。但是,在测试版(1.5b2)中,您的代码工作正常。

如果使用测试版(或降级到1.2)不是一个选项,那么您唯一的解决方案可能是创建另一个模型。类似的东西:

class CreatedBy(models.Model):
    creator = models.ForeignKey(Users, related_name="created_by_user")
    created = models.ForeignKey(Users, unique=True, related_name="created_by")

答案 1 :(得分:0)

更普遍的问题(涉及自然键的循环依赖关系,而不仅仅是具有自然键的自引用)是一个开放的错误,并在此处报告:https://code.djangoproject.com/ticket/31051