しばらくして、stackoverflowで同様の質問を検索し、さまざまな「修正」を試した後、私はここで立ち往生していると言わなければなりません。jQuery-uiを使用して単純なオートコンプリート機能を実現しようとしていますが、データベースにいくつかロードされているものの、どういうわけか、オートコンプリートされた名前は表示されません。私のロジックとテンプレートを紹介します。
models.py
class Usuario(models.Model):
nombre = models.CharField(max_length=128)
facultad = models.ForeignKey(Facultad, null=False, blank=False)
carrera = models.ForeignKey(Carrera, null=False, blank=False)
dni = models.PositiveIntegerField(unique=True)
direccion = models.CharField(max_length=128)
telefono = models.CharField(max_length=64)
email = models.EmailField(max_length=254)
fechaingreso = models.DateTimeField(null=False, blank=False)
creadopor = models.ForeignKey(User, default=0)
def __unicode__(self):
return self.nombre
urls.py
url(r'^get_usuarios/', 'get_usuarios', name='get_usuarios'),
prestar.html
<script type="text/javascript">
$(function() {
$("#usuarios").autocomplete({
source: "{% url get_usuarios %}",
minLength: 2,
});
});
<div class="ui-widget">
<label for="usuarios">Usuarios: </label>
<input id="usuarios">
</div>
<script src="{{ STATIC_URL }}js/jquery-1.9.1.min.js"></script>
<script src="{{ STATIC_URL }}js/jquery-ui-1.10.1.custom.min.js"></script>
(この最後の部分はbase.htmlから継承されており、テンプレートの最後にあります)
views.py
def get_usuarios(request):
if request.is_ajax():
q = request.GET.get('term', '')
usuarios = Usuario.objects.filter(nombre__icontains=q)[:20]
results = []
for usuario in usuarios:
usuario_json = {}
usuario_json['id'] = usuario.id
usuario_json['label'] = usuario.nombre
usuario_json['value'] = usuario.nombre
results.append(usuario_json)
data = simplejson.dumps(results)
else:
data = 'fail'
mimetype = 'application/json'
return HttpResponse(data, mimetype)
特にこれが
usuario_json['id'] = usuario.id
usuario_json['label'] = usuario.nombre
usuario_json['value'] = usuario.nombre
それらが正確に何を意味するのか理解できなかったので、正しいです。
私を照らしたい人に感謝します!