В настоящее время я пишу обернутое приложение django для API календаря Google. (Мой план состоит в том, чтобы сделать его открытым исходным кодом, если я когда-нибудь закончу его правильно.)Связанный объект не находится в БД еще, когда я хотел бы использовать его
Пользователи сайта django могут быть добавлены в качестве гостей для событий, и это действие должно быть синхронизировано с календарем Google. Вот соответствующие кодовые части:
class Event(models.Model):
def _convert_to_gcal_data(self):
# removed some code here ...
# and the interesting bit is
for attendee in self.attendee_set.all():
data['attendees'].append({
'displayName': attendee.user.name,
'email': attendee.user.email,
'responseStatus': attendee.response_status,
})
return data
def update_to_gcal(self):
"""
Updates the remote event db from local data
:return:
"""
service = cal_utils.get_service(settings.GOOGLE_CAL_USER, settings.GOOGLE_CAL_CERT)
data = self._convert_to_gcal_data()
return service.events().update(calendarId=self.calendar.cal_id, eventId=self.ev_id, sendNotifications=False, body=data).execute()
def register_user(self, user):
self.attendee_set.create(user=user, response_status='accepted')
self.update_to_gcal()
Несмотря на метод создания создающего пользователя в attendee_set
, вызов attendee_set.all()
в _convert_to_gcal_data
возвращает пустой QuerySet. Я думаю, что создание еще не зафиксировано.
Как я могу обойти это поведение django?
Update
более тщательно Проверка моих тестов, я обнаружил, что описанное поведение присутствует только тогда, когда я вызываю метод register_user
с точки зрения, а не когда я называю это прямо как я в моих тестах ,
В стандартном Django не существует своего рода «задержка фиксации». Вы запускаете это в App Engine или какой-либо базе данных с возможной согласованностью? –
Nope. В настоящее время я запускаю его локально в sqlite. Мой размещенный экземпляр использует postgres db, я проверю, существует ли проблема там и будет отчитываться. – Akasha
Проблема существует и с postgres. – Akasha