【问题标题】:Django query does not update when database changes数据库更改时Django查询不更新
【发布时间】:2020-05-20 14:55:49
【问题描述】:

我有一个奇怪的问题,我认为它来自 django 和 postgres 之间的缓存,但不太确定。

我在数据库中有多个表,但问题只发生在其中一个上。假设是SpeakingSession 表。每次我进行更改,例如添加新实例、编辑实例时,调用 api 请求都不会返回更改;数据只有在我重启 apache2 服务器时才会更新。

例如:我有 7 个SpeakingSession 记录,然后我添加一个新记录。但是下面的打印命令返回 7。

class SpeakingSessionViewSet(viewsets.ModelViewSet):

    queryset = SpeakingSession.objects.all()

    def list(self, request):
        print(self.queryset.count())
        return super(SpeakingSessionViewSet, self).list(request)

所以我重新启动了 apache2 服务器,然后它返回 8。

知道如何解决这个问题吗?非常感谢!

这是我的模型和序列化器:

class SpeakingSession(models.Model):

    sessionDefinition = models.ForeignKey('SessionDefinition', on_delete=models.CASCADE)
    startTime = models.TimeField()
    endTime = models.TimeField()
    participants = models.ManyToManyField('Profile', default=None, blank=True)

class SpeakingSessionSerializer(serializers.ModelSerializer):

    class Meta:
        model = SpeakingSession
        fields = ('id', 'sessionDefinition', 'startTime', 'endTime', 'participants')

【问题讨论】:

  • 请显示您的 Django 缓存设置。

标签: django postgresql django-cache


【解决方案1】:

尝试使用Model.refresh_from_db

如果您需要从数据库中重新加载模型的值,您可以使用 refresh_from_db() 方法。当没有调用此方法时 参数如下:

模型的所有非延迟字段都更新为值 目前存在于数据库中。清除所有缓存的关系 来自重新加载的实例。

https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.refresh_from_db

【讨论】:

    猜你喜欢
    • 2015-08-13
    • 2021-12-22
    • 1970-01-01
    • 2012-03-21
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    相关资源
    最近更新 更多