我正在尝试构建自定义模型管理器,但遇到了错误。代码如下所示:Django自定义模型管理器数据库错误
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
并且所有表都存在,那么将代码更改为上面的代码,它也可以工作。
我该如何让Django第一次运行syncdb
时不要期望这张表存在?
更新 通过回溯追溯之后,我意识到发生了什么事。查找表旨在包含填充其他表中某些列的选项的值。我认为会发生什么情况是,当创建其他表时,管理器会被调用,看起来,在创建查找表之前会发生这种情况。
有没有办法强迫Django的先创建查找表(短重命名呢?)
请使用--traceback运行syncdb,并发布完整的回溯。 – jpic