Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django filter().first()返回与get()不同的结果_Python_Django_Filter_Model_Django Queryset - Fatal编程技术网

Python Django filter().first()返回与get()不同的结果

Python Django filter().first()返回与get()不同的结果,python,django,filter,model,django-queryset,Python,Django,Filter,Model,Django Queryset,我不知道如何调试这个。我有这个Django模型: 来自django.db导入模型的 从django.utils.translation导入ugettext\u lazy作为_ # ... 类抽象短语(models.Model): term2_过去时=models.TextField(u('term2过去时')) # ... 其他简单字段和方法 类元: 抽象=真 类注释短语(AbstractPhase,models.Model): “”“包含成绩单注释一部分的短语”“” skill=models.

我不知道如何调试这个。我有这个Django模型:

来自django.db导入模型的

从django.utils.translation导入ugettext\u lazy作为_
# ...
类抽象短语(models.Model):
term2_过去时=models.TextField(u('term2过去时'))
# ... 其他简单字段和方法
类元:
抽象=真
类注释短语(AbstractPhase,models.Model):
“”“包含成绩单注释一部分的短语”“”
skill=models.ForeignKey(skill,null=True,on\u delete=models.SET\u null)
问题=models.ForeignKey(
问题:,
空=真,
on_delete=models.SET_NULL,
相关的(名称和短语)
old_id=models.CharField(
_(‘旧身份证’),
最大长度=10,
空白=真,
空=真)
# ... 其他简单字段
类元:
排序=(‘技能’、‘问题编号’)
详细名称=(注释短语)
详细名称复数=(注释短语)
管理员报告无法在Django管理员中更新模型。保存后,Django管理员会报告模型已成功更新,但当他们刷新页面时,数据仍然过期

我打开了一个Django外壳并调查:

In [3]: cp = CommentPhrase.objects.get(pk=10280)

In [4]: cp
Out[4]: <CommentPhrase: lorem ipsum>

In [5]: cp.term2_past_tense
Out[5]: ''

In [6]: cp.term2_past_tense = "Test"

In [7]: cp.save()

In [8]: cp.term2_past_tense
Out[8]: 'Test'

In [9]: cp.refresh_from_db()

In [10]: cp.term2_past_tense
Out[10]: ''
但不是这样:

In [12]: CommentPhrase.objects.get(pk=10280).term2_past_tense
Out[12]: ''
计数返回1:

In [2]: CommentPhrase.objects.filter(pk=10280).count()
Out[2]: 1
那么,究竟为什么filter(pk=x).first()会返回与get(pk=x)不同的东西呢

我可以看到,在原始数据库中,该值存在,但get中没有显示,Django管理中也没有显示

多年来,数据库中有数百个实例通过导入和导出以及Django管理员进行维护和更新。它最近刚刚停止工作。我已经确认,迁移是最新的,并且在生产和本地之间是一致的,而且从手动检查来看,数据库模式看起来不错

在我本地的机器上,一切都很好。该缺陷仅在生产时出现。我正在使用

  • Python 3.9.0
  • Django 3.1.3
  • psycopg2二进制文件2.8.6
我的本地机器正在使用psql(PostgreSQL)12.6(Ubuntu 12.6-0ubuntu0.20.04.1)(这里一切正常) 产品在AWS RDS上使用psql(11.6(Ubuntu11.6-1.pgdg18.04+1),服务器10.15)

这是我的缓存配置:

缓存={
“默认值”:{
'BACKEND':'django_redis.cache.RedisCache',
'LOCATION':'{0}/{1}'。格式(env('REDIS_URL',默认值='redis://127.0.0.1:6379'), 0),
“选项”:{
“客户端类”:“django\u redis.CLIENT.DefaultClient”,
“忽略例外”:为True,#模仿memcache行为。
# http://niwinz.github.io/django-redis/latest/#_memcached_exceptions_behavior
}
}
}

已解决。我的redis缓存服务根本不工作,我需要重新启动该服务。缓存基础设施运行后,一切正常。

可能涉及一些数据库缓存。您使用了
get()
来检索初始Python对象,在同一事务中仍然可能返回该结果。尝试在更新后关闭/重新启动shell(
save()
)。@schwobaseggl我已关闭/重新启动shell,并已完成
refresh\u from_db()
。get仍然返回none,filter/first仍然返回resultUpdated问题以显示缓存配置
In [2]: CommentPhrase.objects.filter(pk=10280).count()
Out[2]: 1