2015-08-04 1 views
1

В настоящее время я пишу обернутое приложение 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 с точки зрения, а не когда я называю это прямо как я в моих тестах ,

+0

В стандартном Django не существует своего рода «задержка фиксации». Вы запускаете это в App Engine или какой-либо базе данных с возможной согласованностью? –

+0

Nope. В настоящее время я запускаю его локально в sqlite. Мой размещенный экземпляр использует postgres db, я проверю, существует ли проблема там и будет отчитываться. – Akasha

+0

Проблема существует и с postgres. – Akasha

ответ

0

Проблема была в представлении. Я делал предварительную выборку, связанную с assignee_set, и это не приводило к переоценке после изменения набора цессионариев.

Удаление предварительной выборки, связанной с кодом просмотра, решило проблему.

Смежные вопросы