有时我(Ecto.StaleEntryError) attempted to update a stale struct在尝试更新记录时会得到.我没有在Ecto的文档中找到任何避免这种情况的方法,那么我该怎么做才能避免这种情况呢?
PS我通过Postgrex,Ecto 2.1.3使用PostgreSQL 9.6.
我正在尝试使用模型类的值定义一个常量,settings.py以便为我的模型之一提供动态定义的 FK:
from catalog.models import Product
PRODUCT_MODEL = Product
Run Code Online (Sandbox Code Playgroud)
毫不奇怪,它会导致AppRegistryNotReady异常:
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
Run Code Online (Sandbox Code Playgroud)
因为没有调用django.setup()方法。
如果我添加
import django
django.setup()
Run Code Online (Sandbox Code Playgroud)
在模型的导入之前,而不是AppRegistryNotReady例外,我得到
AttributeError: 'Settings' object has no attribute 'PRODUCT_MODEL'
Run Code Online (Sandbox Code Playgroud)
当我使用
from django.conf import settings
...
product = models.ForeignKey(
settings.PRODUCT_MODEL,
related_name='order_items')
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以实现这一点而不会出错?
我使用的是 Python 3.5 和 Django 1.9.5。
我在一些对象管理器中有一个方法,它从db获取数据:
def products(self, offset=None)
Run Code Online (Sandbox Code Playgroud)
如果没有offset通过,它只返回所有对象(大约5000,而不是那么多).如果offest它返回,那么,具有偏移的对象.
这种方法在应用程序生命周期中使用了很多.我想以某种方式缓存其结果是合理的.
我的问题是:会functools.lru_cache做这个工作还是我应该考虑使用Django的缓存?或者也许我不应该过早地考虑它?
django ×2
caching ×1
ecto ×1
elixir ×1
erlang ×1
optimization ×1
postgresql ×1
python ×1
python-3.x ×1