예제 #1
0
 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
     )
예제 #2
0
 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,
     )
예제 #3
0
    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