我目前正在为Google Calendar API编写一个包装的django应用程序。 (我的计划是让它成为开源的,如果我能正确地完成它。)
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
的调用会返回一个空的查询集。我猜创造还没有提交。
我如何解决django的这种行为?
更新
更仔细地检查我的测试,我发现只有当我从视图中调用register_user
方法时才会出现所描述的行为,而不是像我在测试中那样直接调用它。
答案 0 :(得分:0)
问题出在视野中。我在assignee_set
上执行了相关的预取,这导致在受理人集更改后不会重新评估。
从视图代码中删除相关的预取解决了这个问题。