Django model中 双向关联问题,求帮助

扁豆焖面先生 发布于 2014/11/16 23:18
阅读 1K+
收藏 1

因为环境原因先定义了Stage,然后定义的Projects. 但是Stage就无法外键引用Projects,model初始化的时候会提示"NameError: name 'Projects' is not defined".

不知道这种情况各位是如何解决的? 

加载中
0
buglife
buglife
这么看来的话,你数据库应该设计有问题,怎么会存在这样的表结构,你建个中间表不就解决问题了吗
扁豆焖面先生
扁豆焖面先生
回复 @CrazyHarry : 赞同
buglife
buglife
回复 @Mr6 : 这也应该是唯一的办法
扁豆焖面先生
扁豆焖面先生
是的,目前想到的办法就是建立一个中间表
1
Kinegratii
Kinegratii

不知道你的业务背景是怎样的,数据表看起来确实有点绕。

抛开这些业务背景,如果想在models.ForeignKey引用未定义的model,可以使用字符串方式,比如:

stage_label = models.ForeignKey('Project')



这个在文档上有说明,主要解决像你这种相互引用的情况,参见

https://docs.djangoproject.com/en/1.7/ref/models/fields/#django.db.models.ForeignKey


Kinegratii
Kinegratii
回复 @Mr6 : Model之间的相互循环引用时有可能出现的,不过需要在具体的增删改查中注意先后顺序的。详情https://code.djangoproject.com/ticket/167
扁豆焖面先生
扁豆焖面先生
这里综合使用的时候需要注意一个问题,小心model之间的死循环
扁豆焖面先生
扁豆焖面先生
多一双单引号就解决了
0
buglife
buglife
把projects放到stages前面不就完了
buglife
buglife
回复 @Mr6 : 也是啊,那你就把外键那个去掉试试
扁豆焖面先生
扁豆焖面先生
回复 @CrazyHarry : 刚才又在网上找了一下,好像使用了manytomany就没有必要使用外键了
扁豆焖面先生
扁豆焖面先生
回复 @CrazyHarry : 不好意思,首先谢谢你的帮助. 主要是projects对stages使用了manytomany,stages然后反过来对projects使用了外键,所以目前即使上下互换也不行. django 用的不是很熟,不知道如何解决这种情况
buglife
buglife
回复 @Mr6 : 这问题问的?肯定有别的办法了。 别用django的sqlall,手动将脚本执行一遍也算是一种方法,不过你可能不喜欢这样做。因为按照常规,当你要让一个模块依赖另一个模块的话,肯定得先有那个被依赖的模块才行。如果你非要这样写的话 也就说明你设计时就出现了一些疏漏
扁豆焖面先生
扁豆焖面先生
除此之外,还有其他办法吗?
0
tube
tube
Python博客.Python教程,Python汉化文档,django汉化在线文档,Flask汉化在线文档http://www.xuyukun.com
扁豆焖面先生
扁豆焖面先生
哇 内容好丰富 既然都是python相关内容,何不自己使用python建个站,顺便练练手 : )
0
看花听鸟
看花听鸟
你在Projects表里加ManytoMany到Stages,就会自动建立中间表了
返回顶部
顶部