diff --git a/apps/cgs/views.py b/apps/cgs/views.py index c38d214..623e2d2 100644 --- a/apps/cgs/views.py +++ b/apps/cgs/views.py @@ -54,7 +54,7 @@ def cgs_conf(request, id_conf): # messages.error(request, message=status) kwargs['dev_conf'] = conf - kwargs['dev_conf_keys'] = ['experiment', 'device', + kwargs['dev_conf_keys'] = ['name', 'freq0', 'freq1', 'freq2', 'freq3'] diff --git a/apps/dds/views.py b/apps/dds/views.py index 9c5fd45..dd9e0bf 100644 --- a/apps/dds/views.py +++ b/apps/dds/views.py @@ -21,8 +21,6 @@ def dds_conf(request, id_conf): kwargs['dev_conf'] = conf kwargs['dev_conf_keys'] = ['name', - 'experiment', - 'device', 'clock', 'multiplier', 'frequencyA_Mhz', diff --git a/apps/jars/views.py b/apps/jars/views.py index cb41027..a2694e9 100644 --- a/apps/jars/views.py +++ b/apps/jars/views.py @@ -22,7 +22,7 @@ def jars_conf(request, id_conf): kwargs['dev_conf'] = conf - kwargs['dev_conf_keys'] = ['experiment', 'device', + kwargs['dev_conf_keys'] = ['name', 'cards_number', 'channels_number', 'channels', 'rd_directory', 'raw_data_blocks', 'data_type', 'acq_profiles', 'profiles_block', 'fftpoints', diff --git a/apps/main/fixtures/main_initial_data.json b/apps/main/fixtures/main_initial_data.json index 3cebba3..b497e95 100644 --- a/apps/main/fixtures/main_initial_data.json +++ b/apps/main/fixtures/main_initial_data.json @@ -1,5 +1,5 @@ [ -{"fields": {"name": "MAIN RADAR", "description": ""}, "model": "main.location", "pk": 1}, +{"fields": {"name": "JRO Imaging", "description": ""}, "model": "main.location", "pk": 1}, {"fields": {"name": "JASMET", "description": ""}, "model": "main.location", "pk": 2}, {"fields": {"name": "SOUSY", "description": ""}, "model": "main.location", "pk": 3}, {"fields": {"name": "JULIA", "description": ""}, "model": "main.location", "pk": 4}, diff --git a/apps/main/forms.py b/apps/main/forms.py index 36252da..ead9841 100644 --- a/apps/main/forms.py +++ b/apps/main/forms.py @@ -32,6 +32,20 @@ class DatepickerWidget(forms.widgets.TextInput): html = '
'+input_html+'
' return mark_safe(html) +class DateRangepickerWidget(forms.widgets.TextInput): + def render(self, name, value, attrs=None): + start = attrs['start_date'] + end = attrs['end_date'] + html = '''
+ + +
+
+ + +
'''.format(start, end) + return mark_safe(html) + class TimepickerWidget(forms.widgets.TextInput): def render(self, name, value, attrs=None): input_html = super(TimepickerWidget, self).render(name, value, attrs) @@ -132,6 +146,7 @@ class OperationForm(forms.Form): super(OperationForm, self).__init__(*args, **kwargs) self.fields['campaign'].choices=Campaign.objects.all().order_by('-start_date').values_list('id', 'name')[:length] + class OperationSearchForm(forms.Form): # -----ALL Campaigns------ campaign = forms.ChoiceField(label="Campaign") @@ -140,6 +155,7 @@ class OperationSearchForm(forms.Form): super(OperationSearchForm, self).__init__(*args, **kwargs) self.fields['campaign'].choices=Campaign.objects.all().order_by('-start_date').values_list('id', 'name') + class NewForm(forms.Form): create_from = forms.ChoiceField(choices=((0, '-----'), @@ -152,4 +168,23 @@ class NewForm(forms.Form): template_choices = kwargs.pop('template_choices', []) super(NewForm, self).__init__(*args, **kwargs) self.fields['choose_template'].choices = add_empty_choice(template_choices) + + +class FilterForm(forms.Form): + + def __init__(self, *args, **kwargs): + extra_fields = kwargs.pop('extra_fields', []) + super(FilterForm, self).__init__(*args, **kwargs) + + for field in extra_fields: + if 'range_date' in field: + self.fields[field] = forms.CharField(required=False) + self.fields[field].widget = DateRangepickerWidget() + if 'initial' in kwargs: + self.fields[field].widget.attrs = {'start_date':kwargs['initial'].get('start_date', ''), + 'end_date':kwargs['initial'].get('end_date', '')} + elif 'template' in field: + self.fields['template'] = forms.BooleanField(required=False) + else: + self.fields[field] = forms.CharField(required=False) \ No newline at end of file diff --git a/apps/main/models.py b/apps/main/models.py index e1ed73d..5605086 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -75,7 +75,7 @@ class Location(models.Model): return u'%s' % self.name def get_absolute_url(self): - return reverse('url_device', args=[str(self.id)]) + return reverse('url_location', args=[str(self.id)]) class DeviceType(models.Model): @@ -143,10 +143,11 @@ class Campaign(models.Model): ordering = ('name',) def __unicode__(self): - return u'%s' % (self.name) + if self.template: + return u'{} (template)'.format(self.name) + else: + return u'{}'.format(self.name) - def get_absolute_url(self): - return reverse('url_campaign', args=[str(self.id)]) def parms_to_dict(self): @@ -259,7 +260,7 @@ class Experiment(models.Model): return u'%s' % (self.name) @property - def radar(self): + def radar_system(self): return self.location def clone(self, **kwargs): @@ -434,8 +435,8 @@ class Configuration(PolymorphicModel): name = models.CharField(verbose_name="Configuration Name", max_length=40, default='') - experiment = models.ForeignKey('Experiment', null=True, blank=True, on_delete=models.CASCADE) - device = models.ForeignKey(Device, null=True, on_delete=models.CASCADE) + experiment = models.ForeignKey('Experiment', verbose_name='Experiment', null=True, blank=True, on_delete=models.CASCADE) + device = models.ForeignKey('Device', verbose_name='Device', null=True, on_delete=models.CASCADE) type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES) @@ -450,8 +451,17 @@ class Configuration(PolymorphicModel): db_table = 'db_configurations' def __unicode__(self): - - return u'[{}]: {}'.format(self.device.device_type.name.upper(), self.name) + + device = '{}:'.format(self.device.device_type.name.upper()) + + if 'mix' in self._meta.get_all_field_names(): + if self.mix: + device = '{} MIXED:'.format(self.device.device_type.name.upper()) + + if self.template: + return u'{} {} (template)'.format(device, self.name) + else: + return u'{} {}'.format(device, self.name) def clone(self, **kwargs): diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index 2047838..57752b0 100644 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -52,6 +52,7 @@
  • Experiment
  • Device Configuration
  • Device
  • +
  • Radar System
  • Experiments
  • Configurations
  • Devices
  • +
  • Radar Systems
  • diff --git a/apps/main/templates/campaigns.html b/apps/main/templates/base_list.html similarity index 55% rename from apps/main/templates/campaigns.html rename to apps/main/templates/base_list.html index d3f8c25..74c8fbc 100644 --- a/apps/main/templates/campaigns.html +++ b/apps/main/templates/base_list.html @@ -2,45 +2,72 @@ {% load bootstrap3 %} {% load static %} {% load main_tags %} + {% block extra-head %} {% endblock %} -{% block camp-active %}active{% endblock %} - +{% block search-active %}active{% endblock %} {% block content-title %}{{title}}{% endblock %} {% block content-suptitle %}{{suptitle}}{% endblock %} {% block content %} + +{% block content-filter %} +{% if form %} +
    + {% bootstrap_form form layout='horizontal' size='medium' %} +
    + + +
    +
    +{% endif %} +{% endblock %} +

    - - {% for key in campaign_keys %} - - {% endfor%} + + {% for key in keys %} + + {% endfor%} - {% for campaign in campaigns %} - - - {% for key in campaign_keys %} - - {% endfor %} - + {% for object in objects %} + + + {% for key in keys %} + + {% endfor %} + {% endfor %}
    #{{ key|title }}#{{ key|title }}
    {{ forloop.counter }}{{ campaign|attr:key }}
    {{ forloop.counter|add:offset }}{{ object|attr:key }}
    -{% endblock %} + -{% block sidebar%} - {% include "sidebar_devices.html" %} {% endblock %} {% block extra-js%} + + -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/apps/main/templates/dev_confs.html b/apps/main/templates/dev_confs.html deleted file mode 100644 index e732cd2..0000000 --- a/apps/main/templates/dev_confs.html +++ /dev/null @@ -1,45 +0,0 @@ -{% extends "base.html" %} -{% load bootstrap3 %} -{% load static %} -{% load main_tags %} -{% block extra-head %} - -{% endblock %} - -{% block conf-active %}active{% endblock %} - -{% block content-title %}{{title}}{% endblock %} -{% block content-suptitle %}{{suptitle}}{% endblock %} - -{% block content %} - - - - {% for key in configuration_keys %} - - {% endfor%} - - {% for item in configurations %} - - - {% for key in configuration_keys %} - - {% endfor %} - - {% endfor %} -
    #{{ key|title }}
    {{ forloop.counter }}{{ item|attr:key }}
    -{% endblock %} - -{% block sidebar%} - {% include "sidebar_devices.html" %} -{% endblock %} - -{% block extra-js%} - -{% endblock %} \ No newline at end of file diff --git a/apps/main/templates/device_edit.html b/apps/main/templates/device_edit.html deleted file mode 100644 index 16ebf08..0000000 --- a/apps/main/templates/device_edit.html +++ /dev/null @@ -1 +0,0 @@ -{% extends "base_edit.html" %} \ No newline at end of file diff --git a/apps/main/templates/devices.html b/apps/main/templates/devices.html deleted file mode 100644 index 6f9a577..0000000 --- a/apps/main/templates/devices.html +++ /dev/null @@ -1,43 +0,0 @@ -{% extends "base.html" %} -{% load bootstrap3 %} -{% load static %} -{% load main_tags %} - -{% block dev-active %}active{% endblock %} - -{% block content-title %}{{title}}{% endblock %} -{% block content-suptitle %}{{suptitle}}{% endblock %} - -{% block content %} - - - - {% for key in device_keys %} - - {% endfor%} - - {% for device in devices %} - - - {% for key in device_keys %} - - {% endfor %} - - {% endfor %} -
    #{{ key|title }}
    {{ forloop.counter }}{{ device|attr:key }}
    - -{% endblock %} - -{% block sidebar%} - {% include "sidebar_devices.html" %} -{% endblock %} - -{% block extra-js%} - -{% endblock %} \ No newline at end of file diff --git a/apps/main/templates/experiments.html b/apps/main/templates/experiments.html deleted file mode 100644 index 6c9cce1..0000000 --- a/apps/main/templates/experiments.html +++ /dev/null @@ -1,45 +0,0 @@ -{% extends "base.html" %} -{% load bootstrap3 %} -{% load static %} -{% load main_tags %} -{% block extra-head %} - -{% endblock %} - -{% block exp-active %}active{% endblock %} - -{% block content-title %}{{title}}{% endblock %} -{% block content-suptitle %}{{suptitle}}{% endblock %} - -{% block content %} - - - - {% for key in experiment_keys %} - - {% endfor%} - - {% for experiment in experiments %} - - - {% for key in experiment_keys %} - - {% endfor %} - - {% endfor %} -
    #{{ key|title }}
    {{ forloop.counter }}{{ experiment|attr:key }}
    -{% endblock %} - -{% block sidebar%} - {% include "sidebar_devices.html" %} -{% endblock %} - -{% block extra-js%} - -{% endblock %} \ No newline at end of file diff --git a/apps/main/templates/item_delete.html b/apps/main/templates/item_delete.html deleted file mode 100644 index 0357f68..0000000 --- a/apps/main/templates/item_delete.html +++ /dev/null @@ -1,33 +0,0 @@ -{% extends "base.html" %} -{% load bootstrap3 %} -{% load static %} -{% load main_tags %} - -{% block dev-active %}{{dev_active}}{% endblock %} -{% block camp-active %}{{camp_active}}{% endblock %} -{% block exp-active %}{{exp_active}}{% endblock %} -{% block conf-active %}{{conf_active}}{% endblock %} - -{% block content-title %}{{title}}{% endblock %} -{% block content-suptitle %}{{suptitle}}{% endblock %} - -{% block content %} -
    - {% csrf_token %} -

    Are you sure you want to delete "{{ object }}"?

    - - -
    -{% endblock %} - -{% block sidebar%} -{% include "sidebar_devices.html" %} -{% endblock %} - -{% block extra-js%} - -{% endblock %} \ No newline at end of file diff --git a/apps/main/templates/location_edit.html b/apps/main/templates/location_edit.html deleted file mode 100644 index 08ff6b5..0000000 --- a/apps/main/templates/location_edit.html +++ /dev/null @@ -1,29 +0,0 @@ -{% extends "base.html" %} -{% load bootstrap3 %} -{% load static %} -{% load main_tags %} -{% block extra-head %} - -{% endblock %} - -{% block loc-active %}active{% endblock %} - -{% block content-title %}{{title}}{% endblock %} -{% block content-suptitle %}{{suptitle}}{% endblock %} - -{% block content %} -
    - {% csrf_token %} - {% bootstrap_form form layout='horizontal' size='medium' %} -
    -
    - -
    -{% endblock %} - -{% block sidebar%} - {% include "sidebar_devices.html" %} -{% endblock %} - -{% block extra-js%} -{% endblock %} \ No newline at end of file diff --git a/apps/main/templates/locations.html b/apps/main/templates/locations.html deleted file mode 100644 index 1e8f58a..0000000 --- a/apps/main/templates/locations.html +++ /dev/null @@ -1,47 +0,0 @@ -{% extends "base.html" %} -{% load bootstrap3 %} -{% load static %} -{% load main_tags %} - -{% block loc-active %}active{% endblock %} - -{% block content-title %}{{title}}{% endblock %} -{% block content-suptitle %}{{suptitle}}{% endblock %} - -{% block content %} - - - - {% for key in location_keys %} - - {% endfor%} - - {% for location in locations %} - - - {% for key in location_keys %} - - {% endfor %} - - {% endfor %} -
    #{{ key|title }}
    {{ forloop.counter }}{{ location|attr:key }}
    - -{% endblock %} - -{% block sidebar%} - {% include "sidebar_devices.html" %} -{% endblock %} - -{% block extra-js%} - -{% endblock %} \ No newline at end of file diff --git a/apps/main/templates/operation.html b/apps/main/templates/operation.html index 92b6ba7..25d9adf 100644 --- a/apps/main/templates/operation.html +++ b/apps/main/templates/operation.html @@ -33,7 +33,9 @@
    {% endif %} - +
    +

    Radar Systems

    +
    {% for location in locations %} @@ -43,7 +45,7 @@

    diff --git a/apps/main/templatetags/main_tags.py b/apps/main/templatetags/main_tags.py index f2a3e11..0ce92c2 100644 --- a/apps/main/templatetags/main_tags.py +++ b/apps/main/templatetags/main_tags.py @@ -6,6 +6,9 @@ def attr(instance, key): display_key = "get_" + key + "_display" + if key=='name': + return '{}'.format(instance) + if hasattr(instance, display_key): return getattr(instance, display_key)() @@ -35,5 +38,5 @@ def get_verbose_field_name(instance, field_name): Returns verbose_name for a field. """ if field_name=='ipp_unit': - return 'Inter pulse period [Km(Units)]' + return 'IPP [Km(Units)]' return mark_safe(instance._meta.get_field(field_name).verbose_name) \ No newline at end of file diff --git a/apps/main/views.py b/apps/main/views.py index 1b21df4..7850a7c 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -2,11 +2,14 @@ from django.shortcuts import render, redirect, get_object_or_404, HttpResponse from django.utils.safestring import mark_safe from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse +from django.db.models import Q +from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.contrib import messages from datetime import datetime +import urllib from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm -from .forms import OperationSearchForm +from .forms import OperationSearchForm, FilterForm from apps.cgs.forms import CGSConfigurationForm from apps.jars.forms import JARSConfigurationForm from apps.usrp.forms import USRPConfigurationForm @@ -21,6 +24,7 @@ from apps.usrp.models import USRPConfiguration from apps.abs.models import ABSConfiguration from apps.rc.models import RCConfiguration, RCLine, RCLineType from apps.dds.models import DDSConfiguration +from django.http.request import QueryDict # Create your views here. @@ -63,18 +67,16 @@ def index(request): def locations(request): - locations = Location.objects.all().order_by('name') - - keys = ['id', 'name', 'description'] + page = request.GET.get('page') + order = ('name',) + + kwargs = get_paginator(Location, page, order) - kwargs = {} - kwargs['location_keys'] = keys[1:] - kwargs['locations'] = locations - kwargs['title'] = 'Location' + kwargs['keys'] = ['name', 'description'] + kwargs['title'] = 'Radar System' kwargs['suptitle'] = 'List' - kwargs['button'] = 'New Location' - return render(request, 'locations.html', kwargs) + return render(request, 'base_list.html', kwargs) def location(request, id_loc): @@ -105,11 +107,11 @@ def location_new(request): kwargs = {} kwargs['form'] = form - kwargs['title'] = 'Location' + kwargs['title'] = 'Radar System' kwargs['suptitle'] = 'New' kwargs['button'] = 'Create' - return render(request, 'location_edit.html', kwargs) + return render(request, 'base_edit.html', kwargs) def location_edit(request, id_loc): @@ -132,7 +134,7 @@ def location_edit(request, id_loc): kwargs['suptitle'] = 'Edit' kwargs['button'] = 'Update' - return render(request, 'location_edit.html', kwargs) + return render(request, 'base_edit.html', kwargs) def location_delete(request, id_loc): @@ -161,19 +163,15 @@ def location_delete(request, id_loc): def devices(request): - devices = Device.objects.all().order_by('device_type__name') - -# keys = ['id', 'device_type__name', 'name', 'ip_address'] - keys = ['id', 'name', 'ip_address', 'port_address', 'device_type'] - - kwargs = {} - kwargs['device_keys'] = keys[1:] - kwargs['devices'] = devices#.values(*keys) + page = request.GET.get('page') + order = ('device_type', 'name') + + kwargs = get_paginator(Device, page, order) + kwargs['keys'] = ['name', 'ip_address', 'port_address', 'device_type'] kwargs['title'] = 'Device' kwargs['suptitle'] = 'List' - kwargs['button'] = 'New Device' - return render(request, 'devices.html', kwargs) + return render(request, 'base_list.html', kwargs) def device(request, id_dev): @@ -208,7 +206,7 @@ def device_new(request): kwargs['suptitle'] = 'New' kwargs['button'] = 'Create' - return render(request, 'device_edit.html', kwargs) + return render(request, 'base_edit.html', kwargs) def device_edit(request, id_dev): @@ -231,7 +229,7 @@ def device_edit(request, id_dev): kwargs['suptitle'] = 'Edit' kwargs['button'] = 'Update' - return render(request, 'device_edit.html', kwargs) + return render(request, 'base_edit.html', kwargs) def device_delete(request, id_dev): @@ -260,18 +258,21 @@ def device_delete(request, id_dev): def campaigns(request): - campaigns = Campaign.objects.all().order_by('start_date') - - keys = ['id', 'name', 'start_date', 'end_date'] + page = request.GET.get('page') + order = ('start_date',) + filters = request.GET.copy() + + kwargs = get_paginator(Campaign, page, order, filters) - kwargs = {} - kwargs['campaign_keys'] = keys[1:] - kwargs['campaigns'] = campaigns#.values(*keys) + form = FilterForm(initial=request.GET, extra_fields=['range_date', 'tags','template']) + kwargs['keys'] = ['name', 'start_date', 'end_date'] kwargs['title'] = 'Campaign' kwargs['suptitle'] = 'List' - kwargs['button'] = 'New Campaign' + kwargs['form'] = form + filters.pop('page', None) + kwargs['q'] = urllib.urlencode(filters) - return render(request, 'campaigns.html', kwargs) + return render(request, 'base_list.html', kwargs) def campaign(request, id_camp): @@ -286,7 +287,7 @@ def campaign(request, id_camp): kwargs['campaign_keys'] = ['template', 'name', 'start_date', 'end_date', 'tags', 'description'] kwargs['experiments'] = experiments - kwargs['experiment_keys'] = ['name', 'radar', 'start_time', 'end_time'] + kwargs['experiment_keys'] = ['name', 'radar_system', 'start_time', 'end_time'] kwargs['title'] = 'Campaign' kwargs['suptitle'] = 'Details' @@ -467,20 +468,22 @@ def campaign_import(request, id_camp): def experiments(request): - experiment_list = Experiment.objects.all() - - keys = ['id', 'name', 'start_time', 'end_time'] - - kwargs = {} + page = request.GET.get('page') + order = ('location',) + filters = request.GET.copy() + + kwargs = get_paginator(Experiment, page, order, filters) - kwargs['experiment_keys'] = keys[1:] - kwargs['experiments'] = experiment_list + form = FilterForm(initial=request.GET, extra_fields=['tags','template']) + kwargs['keys'] = ['name', 'radar_system', 'start_time', 'end_time'] kwargs['title'] = 'Experiment' kwargs['suptitle'] = 'List' - kwargs['button'] = 'New Experiment' + kwargs['form'] = form + filters.pop('page', None) + kwargs['q'] = urllib.urlencode(filters) - return render(request, 'experiments.html', kwargs) + return render(request, 'base_list.html', kwargs) def experiment(request, id_exp): @@ -491,7 +494,7 @@ def experiment(request, id_exp): kwargs = {} - kwargs['experiment_keys'] = ['template', 'radar', 'name', 'start_time', 'end_time'] + kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time'] kwargs['experiment'] = experiment kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status'] @@ -532,7 +535,8 @@ def experiment_new(request, id_camp=None): form = NewForm() if request.method == 'POST': - form = ExperimentForm(request.POST) + form = ExperimentForm(request.POST) + print form.data if form.is_valid(): experiment = form.save() @@ -792,21 +796,26 @@ def parse_mask(l): values.reverse() return int(''.join([str(x) for x in values]), 2) - + def dev_confs(request): - configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment') - - kwargs = {} - kwargs['configuration_keys'] = ['device', 'name', 'experiment', 'type', 'programmed_date'] - kwargs['configurations'] = configurations + page = request.GET.get('page') + order = ('type', 'device__device_type', 'experiment') + filters = request.GET.copy() + + kwargs = get_paginator(Configuration, page, order, filters) + form = FilterForm(initial=request.GET, extra_fields=['tags','template']) + kwargs['keys'] = ['name', 'experiment', 'type', 'programmed_date'] kwargs['title'] = 'Configuration' kwargs['suptitle'] = 'List' + kwargs['form'] = form + filters.pop('page', None) + kwargs['q'] = urllib.urlencode(filters) - return render(request, 'dev_confs.html', kwargs) + return render(request, 'base_list.html', kwargs) def dev_conf(request, id_conf): @@ -874,8 +883,7 @@ def dev_conf_new(request, id_exp=0, id_dev=0): if conf.device.device_type.name=='jars': conf.add_parms_to_filter() - return redirect('url_dev_conf', id_conf=conf.pk) - + return redirect('url_dev_conf', id_conf=conf.pk) kwargs['id_exp'] = id_exp kwargs['form'] = form @@ -1172,6 +1180,44 @@ def sidebar(**kwargs): return side_data +def get_paginator(model, page, order, filters={}, n=10): + + kwargs = {} + query = Q() + if isinstance(filters, QueryDict): + filters = filters.dict() + [filters.pop(key) for key in filters.keys() if filters[key] in ('', ' ')] + filters.pop('page', None) + + if 'start_date' in filters: + filters['start_date__gte'] = filters.pop('start_date') + if 'end_date' in filters: + filters['start_date__lte'] = filters.pop('end_date') + if 'tags' in filters: + tags = filters.pop('tags') + if 'tags' in model._meta.get_all_field_names(): + query = query | Q(tags__icontains=tags) + if 'name' in model._meta.get_all_field_names(): + query = query | Q(name__icontains=tags) + if 'location' in model._meta.get_all_field_names(): + query = query | Q(location__name__icontains=tags) + if 'device' in model._meta.get_all_field_names(): + query = query | Q(device__name__icontains=tags) + + object_list = model.objects.filter(query, **filters).order_by(*order) + paginator = Paginator(object_list, n) + + try: + objects = paginator.page(page) + except PageNotAnInteger: + objects = paginator.page(1) + except EmptyPage: + objects = paginator.page(paginator.num_pages) + + kwargs['objects'] = objects + kwargs['offset'] = (int(page)-1)*n if page else 0 + + return kwargs def operation(request, id_camp=None): diff --git a/apps/rc/models.py b/apps/rc/models.py index 9715fd0..7f05dd6 100644 --- a/apps/rc/models.py +++ b/apps/rc/models.py @@ -57,8 +57,8 @@ DAT_CMDS = { class RCConfiguration(Configuration): - ipp = models.FloatField(verbose_name='Inter pulse period [Km]', validators=[MinValueValidator(1), MaxValueValidator(9000)], default=300) - ntx = models.PositiveIntegerField(verbose_name='Number of TX', validators=[MinValueValidator(1), MaxValueValidator(300)], default=1) + ipp = models.FloatField(verbose_name='IPP [Km]', validators=[MinValueValidator(1), MaxValueValidator(9000)], default=300) + ntx = models.PositiveIntegerField(verbose_name='Number of TX', validators=[MinValueValidator(1), MaxValueValidator(400)], default=1) clock_in = models.FloatField(verbose_name='Clock in [MHz]', validators=[MinValueValidator(1), MaxValueValidator(80)], default=1) clock_divider = models.PositiveIntegerField(verbose_name='Clock divider', validators=[MinValueValidator(1), MaxValueValidator(256)], default=1) clock = models.FloatField(verbose_name='Clock Master [MHz]', blank=True, default=1) @@ -74,14 +74,6 @@ class RCConfiguration(Configuration): class Meta: db_table = 'rc_configurations' - - def __unicode__(self): - - if self.mix: - return u'[RC MIXED]: {}'.format(self.name) - else: - return u'[RC]: {}'.format(self.name) - def get_absolute_url_plot(self): return reverse('url_plot_rc_pulses', args=[str(self.id)])