[GeoNode-users] Create new filter for layers

Simone Dalmasso simone.dalmasso at gmail.com
Thu Jun 18 14:31:22 PDT 2015


Hi Melvin,
you did well, the only missing thing is here
https://github.com/GeoNode/geonode/blob/master/geonode/static/geonode/js/search/search.js,
javascript part that loads the categories through the api and compiles the
query.

Ciao

2015-06-18 23:17 GMT+02:00 Melvin Ramos <melvin.ramos1991 at gmail.com>:

> Hello,
>
> I'm trying to duplicate the Categories filter, because I'm need to use a
> new set of categories for my layers, but I'm having a hard time trying to
> find out how the templates gets the data since it uses AngularJS.
>
> So here is what I''ve done so far:
>
> *Modified the models.py of the Base app*
> I added a new class called IUCNCategory
>
>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *class IUCNCategory(models.Model):    """    Metadata regarding IUCN
>> standards    """    identifier = models.CharField(max_length=255)
>> category_type = models.CharField(        choices=(
>> ('risk_criteria', 'Risk Criteria'),            ('bio_realm',
>> 'Biogeographical Realm'),            ('typology', 'Typology')        ),
>>     max_length=255,    )    description = models.TextField(default='')
>> gn_description = models.TextField('RLE description', default='',
>> null=True)    # is_choice = models.BooleanField(default=True)    def
>> __unicode__(self):        return u"{0}".format(self.gn_description)
>> class Meta:        ordering = ("category_type","identifier",)
>> verbose_name_plural = 'IUCN Categories'*
>
>
> It's just like TopicCategory with one different attribute.
>
> I added to the class ResourceBase the following attribute
>
> *iucn_category = models.ForeignKey(IUCNCategory, null=True, blank=True)*
>
>
>
> *Modified the api.py **of the Api app*
> I created a new class called IUCNCategoryResource
>
>
>> *class IUCNCategoryResource(TypeFilteredResource):**    """IUCN Category
>> api"""*
>>
>> *    def serialize(self, request, data, format, options={}):**
>> options['count_type'] = 'iucn_category'*
>> *        return super(IUCNCategoryResource, self).serialize(request,
>> data, format, options)*
>>
>> *    class Meta:*
>> *        queryset = IUCNCategory.objects.all()*
>> *        resource_name = 'iucn_categories'*
>> *        allowed_methods = ['get']*
>> *        filtering = {*
>> *            'identifier': ALL,*
>> *        }**        serializer = CountJSONSerializer()*
>
>
> It's like the class TopicCategoryResource
>
> *Modified the* *resourcebase_api.py **of the Api app*
>
> I added to the class CommonModelApi the following attribute
>
>
>>
>>
>>
>> *iucn_category = fields.ToOneField(        IUCNCategoryResource,
>> 'iucn_category',        null=True,        full=True)*
>
>
> In the definition on the Haystack filters I added the following in the
> proper places:
>
>
>>
>>
>>
>>
>>
>> *...iucn_category =
>> parameters.getlist("iucn_category__identifier__in")...if iucn_category:
>>         sqs = (SearchQuerySet() if sqs is None else sqs).narrow(
>>     'iucn_category:%s' % ','.join(map(str, iucn_category)))...*
>
>
> Just like the category field.
>
> *Modified the** urls**.py **of the Api app*
>
> I imported the IUCNCategoryResource from the apy.py and wrote
>
> *api.register(IUCNCategoryResource())*
>
>
> *Modified the template _general_filters.html inside the search templates*
>
> I added the following code
>
>
>> *<nav class="filter">*
>> *  <h4><a href="#" class="toggle toggle-nav"><i class="fa
>> fa-chevron-right"></i>{% trans "Risk Criteria" %}</a></h4>*
>> *  <ul class="nav closed" id="iucn_categories">*
>> *    {% verbatim %}*
>> *      <li ng-repeat="iucn_category in iucn_categories"
>> ng-if="iucn_category.count > 0">*
>> *        <a data-value="{{ iucn_category.identifier }}"
>> data-filter="iucn_category__identifier__in" *
>> *         ng-click="multiple_choice_listener($event)"
>> class="{{iucn_category.active}}">{{ iucn_category.gn_description | limitTo:
>> 25 }}{{ iucn_category.gn_description.length > 25 ? '...' : ''}}*
>> *          <span class="badge pull-right">{{ iucn_category.count
>> }}</span>*
>> *        </a>*
>> *      </li>*
>> *    {% endverbatim %}*
>> *  </ul>**</nav>*
>
>
> But nothing shows beneath the filter name in the template, even when I
> have one IUCN category stored in database. I'm guessing there is a view
> somewhere or I'm missing something that allows to pass the data and I can't
> find it or just Angular is too mystic for me.
>
> Can anybody help me?
>
> Thanks in advance,
>
> Melvin
>
>
> --
> Melvin David Ramos Macías
> 07-41408
> Ingeniería de Computación
> Universidad Simón Bolívar
>
>
>
> Enviado con MailTrack
> <https://mailtrack.io/install?source=signature&lang=es&referral=melvin.ramos1991@gmail.com&idSignature=23>
>
> _______________________________________________
> geonode-users mailing list
> geonode-users at lists.osgeo.org
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/geonode-users
>
>


-- 
Simone
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/geonode-users/attachments/20150618/2deb2b41/attachment-0001.html>


More information about the geonode-users mailing list