Minimal input for autocomplete fields

This commit is contained in:
Claude Paroz 2021-08-25 14:35:14 +02:00
parent e674f5b074
commit 74b8635413
3 changed files with 32 additions and 16 deletions

View file

@ -223,6 +223,12 @@ class StudentAdmin(admin.ModelAdmin):
return fieldsets
return super().get_fieldsets(request, obj)
def formfield_for_foreignkey(self, db_field, request, **kwargs):
ffield = super().formfield_for_foreignkey(db_field, request, **kwargs)
if db_field.name in self.autocomplete_fields:
ffield.widget.attrs.update({'data-minimum-input-length': 3})
return ffield
def archive(self, request, queryset):
for student in queryset:
# Save each item individually to allow for custom save() logic.
@ -367,6 +373,12 @@ class AvailabilityInline(admin.StackedInline):
}
autocomplete_fields = ['corporation']
def formfield_for_foreignkey(self, db_field, request, **kwargs):
ffield = super().formfield_for_foreignkey(db_field, request, **kwargs)
if db_field.name in self.autocomplete_fields:
ffield.widget.attrs.update({'data-minimum-input-length': 3})
return ffield
class PeriodAdmin(admin.ModelAdmin):
list_display = ('title', 'dates', 'section', 'level')

View file

@ -188,14 +188,16 @@ $(document).ready(function() {
var sel = $('#contact_select');
sel.html('<option value="">-------</option>');
var id_corp = $(this).find("option:selected").data('idCorp');
$.getJSON('/corporation/' + id_corp + '/contacts/', function(data) {
$.each(data, function(key, contact) {
var item = contact.first_name + ' ' + contact.last_name;
if (contact.role.length) item += ' (' + contact.role + ')';
sel.append($("<option />").val(contact.id).text(item));
if (id_corp) {
$.getJSON('/corporation/' + id_corp + '/contacts/', function(data) {
$.each(data, function(key, contact) {
var item = contact.first_name + ' ' + contact.last_name;
if (contact.role.length) item += ' (' + contact.role + ')';
sel.append($("<option />").val(contact.id).text(item));
});
if (data.length == 1) sel.val(data[0].id);
});
if (data.length == 1) sel.val(data[0].id);
});
}
});
$('#valid_training').click(function() {

View file

@ -6,15 +6,17 @@ django.jQuery(document).ready(function() {
if (this.id == 'id_corporation') var sel = django.jQuery('#id_contact');
else var sel = django.jQuery(this).closest('fieldset').find('.field-contact select');
var id_corp = django.jQuery("option:selected", this).val();
django.jQuery.getJSON('/corporation/' + id_corp + '/contacts/', function(data) {
if (data.length && data[0].corporation_id == id_corp) return
sel.html('<option value="">-------</option>');
django.jQuery.each(data, function(key, contact) {
var item = contact.first_name + ' ' + contact.last_name;
if (contact.role.length) item += ' (' + contact.role + ')';
sel.append(django.jQuery("<option />").val(contact.id).text(item));
if (id_corp) {
django.jQuery.getJSON('/corporation/' + id_corp + '/contacts/', function(data) {
if (data.length && data[0].corporation_id == id_corp) return
sel.html('<option value="">-------</option>');
django.jQuery.each(data, function(key, contact) {
var item = contact.first_name + ' ' + contact.last_name;
if (contact.role.length) item += ' (' + contact.role + ')';
sel.append(django.jQuery("<option />").val(contact.id).text(item));
});
if (data.length == 1) sel.val(data[0].id);
});
if (data.length == 1) sel.val(data[0].id);
});
}
});
});