--- /dev/null
+# -*- encoding: utf-8 -*-
+
+################################################################################
+#
+# PATCH AJAX SELECT FIELD : pour gérer le fait que certaine FK ne sont pas
+# forcément mappé sur la PK du modèle, dans notre cas ici c'est le modèle
+# Pays qui dispose d'un pk sur son id mais les fk sont mappé sur le champs 'code'
+#
+################################################################################
+from ajax_select import get_lookup
+from django.contrib.admin import site
+from django.db import models
+from django.http import HttpResponse
+import ajax_select.views
+
+def fk_ajax_lookup(request,channel):
+ """ this view supplies results for both foreign keys and many to many fields """
+
+ # it should come in as GET unless global $.ajaxSetup({type:"POST"}) has been set
+ # in which case we'll support POST
+ if request.method == "GET":
+ # we could also insist on an ajax request
+ if 'q' not in request.GET:
+ return HttpResponse('')
+ query = request.GET['q']
+ else:
+ if 'q' not in request.POST:
+ return HttpResponse('') # suspicious
+ query = request.POST['q']
+
+ lookup_channel = get_lookup(channel)
+
+ if query:
+ instances = lookup_channel.get_query(query,request)
+ else:
+ instances = []
+
+ results = []
+ for item in instances:
+ itemf = lookup_channel.format_item(item)
+ itemf = itemf.replace("\n","").replace("|","¦")
+ resultf = lookup_channel.format_result(item)
+ resultf = resultf.replace("\n","").replace("|","¦")
+ fk = getattr(lookup_channel, 'fk_key', None)
+ if fk is not None:
+ id = getattr(item, fk)
+ else:
+ id = item.pk
+ results.append( "|".join((unicode(id),itemf,resultf)) )
+ return HttpResponse("\n".join(results))
+
+ajax_select.views.ajax_lookup = fk_ajax_lookup
+
+from ajax_select.fields import AutoCompleteSelectWidget
+
+def value_from_datadict(self, data, files, name):
+
+ got = data.get(name, None)
+ if got:
+ try:
+ return long(got)
+ except:
+ return got
+ else:
+ return None
+
+AutoCompleteSelectWidget.value_from_datadict = value_from_datadict