Django запрос не обновляется при изменении базы данных - PullRequest
0 голосов
/ 04 февраля 2020

У меня странная проблема, я думаю, она исходит из кеша между 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')

1 Ответ

0 голосов
/ 04 февраля 2020

Попробуйте использовать Model.refresh_from_db

Если вам необходимо перезагрузить значения модели из базы данных, вы можете использовать метод refresh_from_db (). Когда этот метод вызывается без аргументов, выполняется следующее:

Все неотложенные поля модели обновляются до значений, присутствующих в настоящее время в базе данных. Все кэшированные отношения очищаются из перезагруженного экземпляра.

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

...