J'utilise django-selectable (https://bitbucket.org/mlavin/django-selectable) avec un administrateur tabularInline pour obtenir la fonctionnalité de saisie semi-automatique sur l'un des champs en ligne. Cela fonctionne pour les inlines ajoutés au moment de la création. Le problème que j'ai est que la fonctionnalité de saisie semi-automatique n'est pas ajoutée lorsque l'utilisateur ajoute une autre ligne à l'en ligne.Django-sélectionnable avec des inlines dynamiques
Il y a un bug et correctif pour ce problème ici
https://bitbucket.org/mlavin/django-selectable/issue/12/make-it-work-with-dynamically-added-forms Et regardant jquery.dj.selectable.js près du fond est:
if (typeof(django) != "undefined" && typeof(django.jQuery) != "undefined") {
if (django.jQuery.fn.formset) {
var oldformset = django.jQuery.fn.formset;
django.jQuery.fn.formset = function(opts) {
var options = $.extend({}, opts);
var addedevent = function(row) {
bindSelectables($(row));
};
var added = null;
if (options.added) {
var oldadded = options.added;
added = function(row) { oldadded(row); addedevent(row); };
}
options.added = added || addedevent;
return oldformset.call(this, options);
};
}
}
On dirait que cela devrait rendre le travail de saisie semi-automatique avec des lignes ajoutées dynamiquement, mais je ne peux pas savoir quoi faire pour que cela fonctionne. L'administrateur tabularInline.html a inline_admin_formset alors devrais-je vérifier cela et pas django.jQuery.fn.formset comme dans le code ci-dessus? Ou en quelque sorte en ajoutant inline_admin_formset à django.jQuery.fn?
Merci beaucoup pour vos suggestions.
J'utilise la version 0.2. En forms.py il y a la forme en ligne:
class GrammarInlineForm(forms.ModelForm):
class Meta:
model = Grammar
widgets = {
'description' :forms.Textarea(attrs={'cols': 80, 'rows': 10, 'class': 'grammarInline'}),
'title' : selectable.AutoCompleteSelectWidget(lookup_class=GrammarLookup, allow_new=True),
}
exclude = ('creation_date', 'creator', 'plan')
def __init__(self, *args, **kwargs):
super(GrammarInlineForm, self).__init__(*args, **kwargs)
Dans admin.py l'administration en ligne est fait et a ajouté à l'administrateur principal (PlanAdmin):
class GrammarInline(admin.TabularInline):
form = GrammarInlineForm
model = Grammar
extra = 2
def save_formset(self, request,form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
instance.creator = request.user
instance.save()
formset.save_m2m()
class PlanAdmin(admin.ModelAdmin):
form = PlanForm
list_display = ('title', 'topic', 'level', 'description','public',)
inlines = [ ActivityInline, GrammarInline, ]
Après avoir lu votre billet http://code.djangoproject.com/ticket/15760 I essayé liaison aux inline événement formsetadd, comme celui-ci
django.jQuery('.ui-autocomplete-input').live('formsetadd', function(e, row) {
console.log('Formset add!');
console.log($(row));
});
mais regardant django/contrib/admin/media/js/inlines.js il semble que ces déclencheurs ne sont pas dans la version 1.3.1 de django. Est-il nécessaire de lier à un événement qui est déclenché quand un inline est ajouté? Il y a un cas similaire ici https://bitbucket.org/mlavin/django-selectable/issue/31/dynamically-added-forms mais cela utilise le plugin formset. Existe-t-il un moyen d'utiliser bindSelectable (ligne) pour l'administrateur en ligne?
Vous ne devriez pas avoir à faire quoi que ce soit pour faire ce travail. Quelle version utilisez vous? –