我的一个观点中有以下代码:
@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
是否可以在不加载视图的情况下运行迁移,还是有更好的方法?
答案 0 :(得分:1)
运行迁移会触发system checks运行,从而导致视图加载。没有选项可以禁用它。
看起来ratelimit
库允许您传递可调用的内容。
@ratelimit(method='POST', rate=get_comment_rate)
def post_comment_ajax(request):
这将在视图运行时调用get_comment_rate
,而不是在模块加载时调用def get_comment_rate():
try:
...
except ProgrammingError:
return '1/m' # or some other default
。这可能是一个优势(价值不会过时)或不利(每次运行视图时运行SQL查询都会影响性能。
通常,您希望在模块加载时避免数据库查询。除了导致迁移问题之外,它还可能在运行测试时导致问题 - 查询可以在创建test database之前转到实时数据库。
如果您对这种风险感到满意,可以选择在装饰器中捕获异常:
poky/<build_directory>/tmp/work/<machine_toolchain>/<package_name>/<package_version>/temp/log.task_order