【问题标题】:Django FieldError only with debug disabledDjango FieldError 仅在禁用调试的情况下
【发布时间】:2014-05-13 21:01:45
【问题描述】:

我有一个 Django 项目,它向我抛出“FieldError:无法将关键字 'game' 解析到字段中。选择是:[选择列表]”。

有趣的是,它仅在 settings.py 中禁用 DEBUG 时才会发生。启用 DEBUG 后,一切似乎都正常。

我已经确定了触发错误的代码。我的模型如下所示:

from django.db import models
from django.forms import ModelForm
from time import strftime
from rostermaker.models import Player
from django.core.exceptions import ValidationError
from django.utils import timezone

class Game(models.Model):
    when = models.DateTimeField(unique = True)
    opponent = models.CharField(max_length = 50, default="TBD")
...

    def __unicode__(self):
        when = timezone.localtime(self.DateTime)
        return when.strftime('%a, %b %d, %Y %I:%M %p')

class Stat(models.Model):
    g = models.ForeignKey(Game, related_name = 'stat_game')
    player = models.ForeignKey(Player, related_name = 'stat_player', limit_choices_to={'active': True})
... 

在 admin.py 中,.count 和 .filter 行会触发错误:

    def save_model(self, request, obj, form, change):
        obj.save()
        form.save_m2m()
        count = obj.players.count()
        women = obj.players.filter(sex='F')
        women_count = women.count()
        if count != 0:
            women_pct = int((women_count/float(count))*100)
            self.message_user(request,"Players scheduled: %s | Women: %s percent" % (count, women_pct))
        else:
            self.message_user(request,"Players scheduled: 0 | Women: 0 percent")

在几个视图中,与此类似的行会导致错误:

played_games_list = Game.objects.filter(DateTime__lte=timezone.now()).order_by('-when')

我使用的是 Django 1.4 版和 PostgreSQL 8.4.20。

我从这里读到的最好的猜测是 Game 类没有正确加载。但是为什么当 DEBUG 打开时它似乎可以正确加载让我感到困惑。

感谢任何帮助。

更新:根据要求进行追溯:

Traceback(最近一次调用最后一次):

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/core/handlers/base.py”,第 111 行,在 get_response 响应 = 回调(请求,*callback_args,**callback_kwargs)

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/contrib/admin/options.py”,第 366 行,在包装器中 return self.admin_site.admin_view(view)(*args, **kwargs)

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/utils/decorators.py”,第 91 行,在 _wrapped_view response = view_func(request, *args, **kwargs)

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/views/decorators/cache.py”,第 89 行,在 _wrapped_view_func response = view_func(request, *args, **kwargs)

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/contrib/admin/sites.py”,第 196 行,在内部 返回视图(请求,*args,**kwargs)

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/utils/decorators.py”,第 25 行,在 _wrapper return bound_func(*args, **kwargs)

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/utils/decorators.py”,第 91 行,在 _wrapped_view response = view_func(request, *args, **kwargs)

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/utils/decorators.py”,第 21 行,在 bound_func 返回函数(自我,*args2,**kwargs2)

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/db/transaction.py”,第 224 行,在内部 返回函数(*args, **kwargs)

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/contrib/admin/options.py”,第 955 行,在 add_view self.save_model(request, new_object, form, False)

文件“/home/bwareham/webapps/mprsb/myproject/rostermaker/admin.py”,第 69 行,在 save_model 中 count = obj.players.count()

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/db/models/manager.py”,第 119 行,计数 return self.get_query_set().count()

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/db/models/fields/related.py”,第 567 行,在 get_query_set return super(ManyRelatedManager, self).get_query_set().using(db)._next_is_sticky().filter(**self.core_filters)

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/db/models/query.py”,第 624 行,在过滤器中 return self._filter_or_exclude(False, *args, **kwargs)

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/db/models/query.py”,第 642 行,在 _filter_or_exclude clone.query.add_q(Q(*args, **kwargs))

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/db/models/sql/query.py”,第 1250 行,在 add_q can_reuse=used_aliases, force_having=force_having)

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/db/models/sql/query.py”,第 1122 行,在 add_filter process_extras=process_extras)

文件“/home/bwareham/webapps/mprsb/lib/python2.7/django/db/models/sql/query.py”,第 1316 行,在 setup_joins "选择是:%s" % (name, ", ".join(names)))

FieldError:无法将关键字“游戏”解析为字段。选项包括:名人堂、活跃、别名、battingchamps、bombat、船长、名字、goldengloves、id、lastName、mostimproved、mvp、照片、新秀、花名册、性别、步行者、whippet

【问题讨论】:

  • 可能不会导致您的问题,但使用 DateTime 作为变量名可能不是一个好主意。
  • 我会寻找“游戏”是过滤器一部分的行,这会导致像你提到的错误,但如果没有回溯,我看不到太多。
  • 请完整的错误堆栈。
  • 追溯添加到原始帖子。
  • DateTime 作为变量被移除(替换为“when”)。它没有改变 FieldError 的行为,但感谢您的建议。

标签: django server-error


【解决方案1】:

这是某种加载问题。找到解决方案here

能够在 urls.py 中的管理员自动发现功能之​​前使用此 sn-p 强制加载模型:

from django.db.models.loading import cache as model_cache
if not model_cache.loaded:
    model_cache.get_models()

感谢所有试图帮助我解决问题的人。我总能学到一些东西。

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多