def serialize_shared_mission(pending_bargain_shared_mission, kingdom): pending_mission = serialize_pending_mission(pending_bargain_shared_mission.pending_mission) # Replace links on grids to delete pending_mission['links'] = { 'delete': reverse('bargain.views.shared_pending_mission_delete', args=(pending_bargain_shared_mission.pk,)), } # Add virtual affectations for grid in pending_mission['grids']: # Replace links on grid to affect grid['links'] = { 'affect': reverse('bargain.views.shared_mission_affect', args=(pending_bargain_shared_mission.pk, int(grid['id']))), } grid['virtual_affectations'] = [serialize_mission_affectation(o) for o in pending_bargain_shared_mission.pendingbargainsharedmissionaffectation_set.filter(mission_grid=grid['id'])] # Replace links on affectation to defect. for affectation in grid["virtual_affectations"]: affectation['links'] = { 'defect': reverse('bargain.views.shared_mission_defect', args=(int(affectation['id']),)), } # Compute final results r = { 'id': pending_bargain_shared_mission.id, 'shared_by_me': (pending_bargain_shared_mission.pending_mission.kingdom_id == kingdom.pk), 'pending_mission': pending_mission, } return r
def api(request): """ JSON contribution from this app. """ resp = {} # Pending missions pending_missions = request.user.kingdom.pendingmission_set.all().select_related("mission").prefetch_related("mission__missiongrid_set", "mission__missiongrid_set__pendingmissionaffectation_set") resp['pending_missions'] = [serialize_pending_mission(o) for o in pending_missions] # Available missions available_missions = request.user.kingdom.availablemission_set.all().select_related("mission") resp['available_missions'] = [serialize_available_mission(o) for o in available_missions] return resp