Enabled event create button

Added MIC field to the event form

Added the ability to specify the fields you want to query in an api request

Changes to the user profile to enable queries via the API
This commit is contained in:
Tom Price
2014-12-02 01:24:38 +00:00
parent 201d4c5292
commit 3aec6c212d
4 changed files with 202 additions and 171 deletions

View File

@@ -1,9 +1,11 @@
import hashlib
import datetime
from django.db import models from django.db import models
from django.contrib.auth.models import AbstractUser from django.contrib.auth.models import AbstractUser
from django.conf import settings from django.conf import settings
import hashlib
import reversion import reversion
import datetime
# Create your models here. # Create your models here.
@@ -18,6 +20,9 @@ class Profile(AbstractUser):
url = "https://www.gravatar.com/avatar/" + hashlib.md5(self.email).hexdigest() + "?d=identicon&s=500" url = "https://www.gravatar.com/avatar/" + hashlib.md5(self.email).hexdigest() + "?d=identicon&s=500"
return url return url
@property
def name(self):
return self.get_full_name() + ' "' + self.initials + '"'
class RevisionMixin(object): class RevisionMixin(object):
@property @property
@@ -163,7 +168,7 @@ class Event(models.Model, RevisionMixin):
) )
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
person = models.ForeignKey('Person') person = models.ForeignKey('Person', null=True, blank=True)
organisation = models.ForeignKey('Organisation', blank=True, null=True) organisation = models.ForeignKey('Organisation', blank=True, null=True)
venue = models.ForeignKey('Venue') venue = models.ForeignKey('Venue')
description = models.TextField(blank=True, null=True) description = models.TextField(blank=True, null=True)

View File

@@ -91,7 +91,7 @@
</div> </div>
{% endif %} {% endif %}
<div class="col-md-6"> <div class="col-md-6">
<div class="panel panel-default form-hws form-is_rig"> <div class="panel panel-default form-hws form-is_rig {% if object.pk and not object.is_rig %}hidden{% endif %}">
<div class="panel-heading">Contact Details</div> <div class="panel-heading">Contact Details</div>
<div class="panel-body"> <div class="panel-body">
<div class="form-group"> <div class="form-group">
@@ -285,6 +285,26 @@
{% render_field form.status class+="form-control" %} {% render_field form.status class+="form-control" %}
</div> </div>
</div> </div>
<div class="form-group">
<label for="{{ form.mic.id_for_label }}"
class="col-sm-4 control-label">{{ form.mic.label }}</label>
<div class="col-sm-8">
<input type="hidden" id="{{ form.mic.id_for_label }}" name="{{ form.mic.name }}"
value="{{ form.mic.value|default_if_none:"" }}"/>
<input type="text" id="{{ form.mic.id_for_label }}-input"
class="form-control autocomplete-json"
data-valueurl="
{% if form.mic.value %}
{% url 'api_secure' model='mic' pk=form.mic.value %}
{% else %}
{% url 'api_secure' model='mic' %}
{% endif %}?fields=name"
data-sourceurl="{% url 'api_secure' model='mic' %}?fields=first_name,username,initials"
data-target="{{ form.mic.id_for_label }}"/>
</div>
</div>
{#% include 'RIGS/eventitem_table.html' %#} {#% include 'RIGS/eventitem_table.html' %#}
</div> </div>
<div class="col-sm-12"> <div class="col-sm-12">

View File

@@ -10,7 +10,7 @@
<h3>Rigboard</h3> <h3>Rigboard</h3>
</div> </div>
<div class="col-sm-2"> <div class="col-sm-2">
<a href="{#% url 'person_create' %#}" class="btn btn-default pull-right">New <span <a href="{% url 'event_create' %}" class="btn btn-default pull-right">New <span
class="glyphicon glyphicon-plus"></span></a> class="glyphicon glyphicon-plus"></span></a>
</div> </div>
{% comment %} {% comment %}

View File

@@ -10,6 +10,7 @@ from RIGS import models
import simplejson import simplejson
# Create your views here. # Create your views here.
def login(request, **kwargs): def login(request, **kwargs):
if request.user.is_authenticated(): if request.user.is_authenticated():
@@ -156,6 +157,7 @@ class SecureAPIRequest(generic.View):
'venue': models.Venue, 'venue': models.Venue,
'person': models.Person, 'person': models.Person,
'organisation': models.Organisation, 'organisation': models.Organisation,
'mic': models.Profile,
} }
''' '''
@@ -180,19 +182,24 @@ class SecureAPIRequest(generic.View):
# Response format where applicable # Response format where applicable
format = request.GET.get('format', 'json') format = request.GET.get('format', 'json')
fields = request.GET.get('fields', None).split(',')
# Supply data for one record # Supply data for one record
if pk: if pk:
object = get_object_or_404(self.models[model], pk=pk) object = get_object_or_404(self.models[model], pk=pk)
fields = request.GET.get('fields', None)
data = serializers.serialize(format, [object], fields=fields) data = serializers.serialize(format, [object], fields=fields)
return HttpResponse(data, content_type="application/" + format) return HttpResponse(data, content_type="application/" + format)
# Supply data for autocomplete ajax request in json form # Supply data for autocomplete ajax request in json form
term = request.GET.get('term', None) term = request.GET.get('term', None)
if term: if term:
objects = self.models[model].objects.filter(name__icontains=term)[:20] if fields is None:
fields = ['name']
all_objects = self.models[model].objects
results = [] results = []
for field in fields:
filter = field + "__icontains"
objects = all_objects.filter(**{filter: term})
for o in objects: for o in objects:
data = { data = {
'pk': o.pk, 'pk': o.pk,
@@ -200,7 +207,6 @@ class SecureAPIRequest(generic.View):
'label': o.name, 'label': o.name,
} }
results.append(data) results.append(data)
# todo: fix simplejson issues
json = simplejson.dumps(results) json = simplejson.dumps(results)
return HttpResponse(json, content_type="application/json") # Always json return HttpResponse(json, content_type="application/json") # Always json