Czy można odświeżyć stan obiektu django z bazy danych? Mam na myśli zachowanie mniej więcej równoważne z:
new_self = self.__class__.objects.get(pk=self.pk)
for each field of the record:
setattr(self, field, getattr(new_self, field))
AKTUALIZACJA: Znaleziono ponownie otwartą / wontfix wojnę w trackerze: http://code.djangoproject.com/ticket/901 . Nadal nie rozumiem, dlaczego opiekunom to się nie podoba.
python
django
django-models
grep
źródło
źródło
commmit
. Gdy już to zrobisz, będziesz musiał poczekać na zatwierdzenie następnej transakcji SQL. Dlaczego to robisz? Jak długo będziesz czekać na następną transakcję?Odpowiedzi:
Od Django 1.8 odświeżanie obiektów jest wbudowane. Link do dokumentacji .
źródło
refresh_from_db
zaktualizuje tylko takie już wypełnione pola.DoesNotExist
wyjątek, jeśli podstawowy obiekt został usunięty podczas wywoływaniarefresh_from_db
. FYI.Zauważyłem, że relatywnie łatwo jest przeładować obiekt z bazy danych w następujący sposób:
źródło
refresh_from_db
rozwiązuje wszystkie te problemy.W odniesieniu do komentarza @ grep, czy nie powinno być możliwe:
źródło
refresh_from_db
metodę.Jak zauważył @Flimm, jest to naprawdę świetne rozwiązanie:
Spowoduje to ponowne załadowanie wszystkich danych z bazy danych do obiektu.
źródło