我正在尝试构建自定义模型管理器,但遇到了错误。代码如下所示:
class LookupManager(models.Manager):
def get_options(self, *args, **kwargs):
return [(t.key, t.value) \
for t in Lookup.objects.filter(group=args[0].upper())]
class Lookup(models.Model):
group = models.CharField(max_length=1)
key = models.CharField(max_length=1)
value = models.CharField(max_length=128)
objects = LookupManager()
(我玩过get_options
很多使用super()
和其他过滤结果的方法)
当我运行时syncdb
,我收到以下错误(ops_lookup
对应的表):
django.db.utils.DatabaseError: no such table: ops_lookup
我注意到,如果我将管理器更改为返回[]
而不是过滤器,那么就syncdb
可以了。另外,如果我已经运行syncdb
并且所有表都存在,那么将代码更改为上面的代码,它也可以正常工作。
如何让 Djangosyncdb
在第一次运行时不期望该表存在?
更新 查看回溯后,我意识到发生了什么。查找表旨在包含填充其他表中某些列的选择的值。我认为会发生什么是在创建其他表时调用管理器,这似乎发生在创建查找表之前。
有没有办法强制 django 首先创建查找表(没有重命名它?)