def get_table_records(self, obj, form, ids): serializer = create_record_serializer(form) return self.serialize_list( form.TableModel, serializer(form.TableModel.objects.get_objects(obj.owner).filter(id__in=ids)), name=form.name, overlay_type='record', model_name_plural='form_%s' % form.id )
def get_table_records(self, obj, form): # raise Exception(form.TableModel.objects.get_objects(obj.owner, project=obj)) return self.serialize_list( form.TableModel, create_record_serializer(form), form.TableModel.objects.get_objects(obj.owner, project=obj), name=form.name, overlay_type="record", model_name_plural="form_%s" % form.id, )
def get_children(self, obj): # ~21 queries per marker is the best I can do if data from 2 separate # forms is attached to a single marker. This query could be optimized # further if needed. from django.contrib.contenttypes.models import ContentType from localground.apps.site import models candidates = [ models.Photo, models.Audio, models.MapImage, models.Project, models.Marker] forms = ( models.Form.objects.prefetch_related( 'field_set', 'field_set__data_type', 'projects') .filter( projects=obj.project)) for form in forms: candidates.append(form.TableModel) # this caches the ContentTypes so that we don't keep executing one-off # queries ContentType.objects.get_for_models(*candidates, concrete_model=False) children = {} self.audio = self.get_audio(obj) or [] self.photos = self.get_photos(obj) or [] self.map_images = self.get_map_images(obj) or [] if self.audio: children['audio'] = self.audio if self.photos: children['photos'] = self.photos if self.map_images: children['map_images'] = self.map_images # add table data: form_dict = obj.get_records(forms=forms).items() for form, records in form_dict: SerializerClass = create_record_serializer(form) self.records.extend(records) d = self.serialize_list( obj, form.TableModel, SerializerClass(records, context={ 'request': {} }, many=True).data, name=form.name, overlay_type='record', model_name_plural='form_%s' % form.id ) d.update({ 'headers': [f.col_alias for f in form.fields] }) children['form_%s' % form.id] = d return children