gpt4 book ai didi

django - 在不加载 View /url 的情况下运行迁移

转载 作者:行者123 更新时间:2023-12-04 17:50:38 28 4
gpt4 key购买 nike

我的一个 View 中有以下代码:

@ratelimit(method='POST', rate=get_comment_rate())
def post_comment_ajax(request):
...

但是,在初始 ./manage.py migrate 时,get_comment_rate() 需要数据库中的表,因此我无法运行迁移来创建表。我最终遇到了以下错误:

Django.db.utils.ProgrammingError: relation .. does not exist

是否可以在不加载 View 的情况下运行迁移,或者是否有更好的方法?

最佳答案

运行迁移会触发 system checks运行,这会导致加载 View 。没有禁用此功能的选项。

它看起来像 ratelimit库允许您传递可调用对象。

@ratelimit(method='POST', rate=get_comment_rate)
def post_comment_ajax(request):

这将在 View 运行时调用 get_comment_rate,而不是在加载模块时调用。这可能是优势(值不会过时)或劣势(每次运行 View 时都运行 SQL 查询可能会影响性能。

通常,您希望在加载模块时避免数据库查询。除了导致迁移问题外,它还可能导致运行测试时出现问题——查询可以在 test database 之前转到实时数据库。已创建。

如果您可以接受这种风险,一种选择是在装饰器中捕获异常:

def get_comment_rate():
try:
...
except ProgrammingError:
return '1/m' # or some other default

关于django - 在不加载 View /url 的情况下运行迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45320852/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com