【问题标题】:Django queryset returns different results from shell and serverDjango 查询集从 shell 和服务器返回不同的结果
【发布时间】:2011-12-22 14:19:21
【问题描述】:

我有一个 Django 查询集,它在不同情况下得到不同的结果,我很困惑。

texts = Text.objects.filter(keywords__icontains=word)

型号:

class Text(models.Model):

    views = models.IntegerField(default=0)
    keywords = models.CharField(max_length=250)
    response = models.CharField(max_length=140)

该调用(字面复制)使用 ./manage.py shell 获得预期结果,但在服务器上找不到任何内容。

当我调用 Text.objects.all() 时,它会提取结果,但由于某种原因,服务器上的过滤器没有找到与任何其他情况相同的结果。

为什么???

【问题讨论】:

  • 这是在同一台机器上使用相同的 settings.py 文件吗?如果没有,您是否在两台机器上都运行了 syncdb?
  • 您如何在服务器上定义word(可能在您的views.py 中)?我敢打赌你的问题就在那里。
  • 它们在同一台机器上,使用相同的 settings.py。
  • 我在每种情况下都用相同的过程定义单词,在短语中接收一个字符串,然后我用 word = body.split(' ')[0] 检索第一个单词。有没有更好的方法来获取字符串的第一个单词?

标签: django django-models django-queryset


【解决方案1】:

也许这是因为您的生产数据库引擎与您的开发引擎不同(我假设您在本地计算机上运行 manage.py shell)?

请记住,行为 - 尤其是在字符串匹配方面 - 可能会有所不同according to your database backend

或者您的数据库的内容可能不同?

如果manage.py shell 访问同一个数据库,结果应该是相同的。您确定您的请求(来自网络服务器)是正确的吗?检查您的数据库日志。

【讨论】:

  • 我在同一台服务器上同时使用相同的数据库和后端。就像我说的,objects.all() 包含我正在寻找的对象,具有所有正确的属性,但是在过滤它时,它不会出现,仅在生产站点上。
猜你喜欢
  • 2014-05-05
  • 2012-02-05
  • 1970-01-01
  • 2016-11-18
  • 2016-10-27
  • 1970-01-01
  • 2011-11-08
  • 2013-04-29
  • 2012-07-07
相关资源
最近更新 更多