我一直在寻找南方网站,谷歌和SO的答案,但找不到一个简单的方法来做到这一点.
我想用South重命名一个Django模型.说你有以下内容:
class Foo(models.Model):
name = models.CharField()
class FooTwo(models.Model):
name = models.CharField()
foo = models.ForeignKey(Foo)
Run Code Online (Sandbox Code Playgroud)
并且你想将Foo转换为Bar,即
class Bar(models.Model):
name = models.CharField()
class FooTwo(models.Model):
name = models.CharField()
foo = models.ForeignKey(Bar)
Run Code Online (Sandbox Code Playgroud)
为了简单起见,我只是尝试将名称从更改Foo为Bar,但暂时忽略该foo成员FooTwo.
使用南方最简单的方法是什么?
db.rename_table('city_citystate', 'geo_citystate'),但在这种情况下我不确定如何修复外键.Ipython有一个名为autoreload的插件,可能会在每个命令后重新加载所有模块,因此您可以更改源代码而不必退出shell并重新输入所有命令.例如,请参阅http://dsnra.jpl.nasa.gov/software/Python/tips-ipython.html.
然而,当它与Django一起使用时,这看起来最好是片状的,例如python manage.py shell给我一个带有Django上下文的IPython shell,但是自动重载似乎根本不可靠.
这是我添加到ipy_user_conf.py文件中的内容:
def main():
... # rest of the fn here
import ipy_autoreload
ip.magic('%autoreload 2')
自动上载在有限的情况下工作,可能有10-20%的时间.有没有人成功配置这个与Django一起工作?
我正在尝试在Django中重构一个相当重要的视图函数.浮动的变量太多了,这是一个巨大的功能.
理想情况下,我想将视图模块化为逻辑函数.但是,我必须传递函数上下文以便轻松访问变量.
例如:
def complex_view(request, slug):
some complex logic which creates variable abc ...
...
some more complex logic which uses variable abc ...
...
etc.
Run Code Online (Sandbox Code Playgroud)
应该变得像:
def complex_view(request, slug):
process_X()
...somehow pass variables and context to next function...
process_Y()
...
etc.
def process_X():
...
def process Y():
...
Run Code Online (Sandbox Code Playgroud)
我可以想到几种方法来实现这一点,其中一些方法在本页中有所指出:http: //mail.python.org/pipermail/tutor/2009-February/067506.html
一个.主视图中定义的子功能.这看起来很糟糕,因为很难分辨哪些变量是共享的,哪些不是.
湾 传递locals()中作为字典.这也是kludgey,因为现在有两种不同的方式来访问变量:xyz和contextDict['xyz'].你必须在呼叫中使用一个N,并N+1在堆栈中调用下一个.
C.暴力将所有变量传递给每个函数调用并返回相关的变量.当涉及到很多变量时,这变得非常乏味.
d.在C++/C#中,我只需创建一个类MyComplexViewContext,定义所有共享变量,并创建成员函数来执行工作.然后你可以使用self.xyz该类中的所有内容.我想我也可以在Python中使用这个方法.不知道这是不是最好的方法.
你对Python/Django中首选的方法有什么看法?