0

本地我使用sqllite3作为数据库,但在生产中我使用MySQL。当我提出我的项目到生产我遇到了这个错误:Django错误只在MySQL数据库上

... 
File "S:\Python27\lib\site-packages\django\templatetags\i18n.py", line 46, in 
render 
    langs = self.languages.resolve(context) 
    File "S:\Python27\lib\site-packages\django\template\base.py", line 653, in res 
olve 
    value = self._resolve_lookup(context) 
    File "S:\Python27\lib\site-packages\django\template\base.py", line 692, in _re 
solve_lookup 
    raise VariableDoesNotExist("Failed lookup for key [%s] in %r", (bit, current 
)) # missing attribute 
VariableDoesNotExist: Failed lookup for key [LANGUAGES] in u'[{}, {}, {}]' 

我使用Django的国际化

在哪里这是哪里来的任何想法?谷歌没有多少信息,也没有什么数据可以用来调试?我将本地测试环境指向生产数据库,并得到相同的错误。在settings.py

我的语言变种是:

LANGUAGES = (
    ('en',gettext('English')), 
    ('fr',gettext('French')), 
) 

编辑 使用调试打开我的错误:

Caught OperationalError while rendering: (1242, 'Subquery returns more than 1 row') 

上线{% for f in frames %}

我的框架型号是:

@I18n('title','description') 
class Collection(models.Model): 
    title = models.CharField(max_length=255) 
    description = models.CharField(max_length=255) 
    order = models.IntegerField(default=100) 
    image = models.ImageField(upload_to="collection/images",null=True) 
    rollover = models.ImageField(upload_to="collection/images",null=True,blank=True) 
    publish = models.BooleanField(default=True) 

    def __unicode__(self): 
     return self.title 

@I18n('title') 
class Frame(models.Model): 
    title = models.CharField(max_length=255) 
    collection = models.ManyToManyField(Collection) 
    order = models.IntegerField(default=100) 
    image = models.ImageField(upload_to="frame/images") 
    rollover = models.ImageField(upload_to="frame/images",null=True,blank=True) 
    publish = models.BooleanField(default=True) 

    def __unicode__(self): 
     return self.title 

编辑#2

麻烦的MySQL线,不SQLite中

SELECT `FrontEnd_article`.`id`, `FrontEnd_article`.`title_fr`, `FrontEnd_article` 
.`title_en`, `FrontEnd_article`.`text_fr`, `FrontEnd_article`.`text_en`, 
`FrontEnd_article`.`date`, `FrontEnd_article`.`image`, `FrontEnd_article`.`image_text`, 
`FrontEnd_article`.`can_comment`, `FrontEnd_article`.`order`, 
`FrontEnd_article`.`publish` FROM `FrontEnd_article` INNER JOIN 
`FrontEnd_article_frames` ON (`FrontEnd_article`.`id` = 
`FrontEnd_article_frames`.`article_id`) WHERE `FrontEnd_article_frames`.`frame_id` = 
(SELECT U0.`id` FROM `FrontEnd_frame` U0 INNER JOIN `FrontEnd_frame_collection` U1 ON 
(U0.`id` = U1.`frame_id`) WHERE (U1.`collection_id` = 1 AND U0.`publish` = True)) 
ORDER BY `FrontEnd_article`.`date` DESC 
的帮助失败再次

谢谢!

回答

2

如果您暂时启用DEBUG,回溯是否相同?错误消息被禁用时可能会产生误导。这也可能是一个错误的数据库设置,Django在不同的阶段退出。

+0

哇谢谢你的提示!我想我是部分追逐红鲱鱼。我现在得到这个错误... Caught OperationalError呈现时:(1242,'子查询返回多于一行') – Valchris 2011-05-30 20:50:04

+0

如何导致错误的数据库查询看起来像?它使用orm还是原始的sql?显然,查询包含sql在sqlite中有效,但不在mysql中,因此引发了OperationalError。 – 2011-05-30 21:24:13

0
SELECT * FROM FrontEnd_article INNER JOIN FrontEnd_article_frames ON 
(FrontEnd_article.id = FrontEnd_article_frames.article_id) WHERE 
FrontEnd_article_frames.frame_id = (SELECT U0.id FROM FrontEnd_frame U0 INNER JOIN 
FrontEnd_frame_collection U1 ON (U0.id = U1.frame_id) WHERE (U1.collection_id = 1 AND 
U0.publish = True)) 

这是由Django生成的简化版本。当我打破了这个查询我意识到,内部联接假设只有1值从返回:

(SELECT U0.id FROM FrontEnd_frame U0 INNER JOIN FrontEnd_frame_collection U1 ON 
(U0.id = U1.frame_id) WHERE (U1.collection_id = 1 AND U0.publish = True)) 

这实际上返回的结果集的数据。修复很简单,一旦我找到它,我用“IN”替换了“=”,它工作正常。

FrontEnd_article_frames.frame_id IN (SELECT U0.id FROM FrontEnd_frame U0 INNER JOIN 
FrontEnd_frame_collection U1 ON (U0.id = U1.frame_id) WHERE (U1.collection_id = 1 AND 
U0.publish = True))