2016-06-11 3 views
1

J'ai suivi le tutoriel pour django-autocomplete-light http://django-autocomplete-light.readthedocs.io/en/master/tutorial.html mais j'ai la question suivante.django-autocomplete-light forme de clé étrangère

J'ai un modèle

class Order(models.Model): 
    client = models.ForeignKey(Client) 
    product = .... 

Si je crée une forme comme décrit dans le tutoriel

class OrderForm(forms.ModelForm): 
    class Meta: 
     model = Order 
     fields = ('__all__') 
     widgets = { 
      'client': autocomplete.ModelSelect2(url='ordersapp:client-autocomplete') 
    } 

et admin.py

class OrderAdmin(admin.ModelAdmin): 
    form = OrderForm 

j'obtenir le résultat souhaité, qui est autocomplete pour les clients classés.

Mais si je ne veux pas créer un formulaire et utiliser à la place

class OrderAdmin(admin.ModelAdmin): 
    ..... 

est-il un moyen d'avoir le widget de saisie semi-automatique pour le champ client? J'apprécie toute aide.

+1

Il ne semble pas que vous pouvez personnaliser la forme d'administration sans fournir en fait une forme à utiliser. La façon dont vous avez spécifié que cela fonctionne est la façon standard de le faire. Y a-t-il une raison pour laquelle vous ne voulez pas créer un formulaire? – denvaar

+0

Vous pouvez toujours remplacer get_form sur la classe ModelAdmin que vous créez, mais je dirais que la façon dont vous le faites maintenant est plus propre et plus facile à comprendre. La classe ModelAdmin avec créer un formulaire personnalisé standard basé sur le modèle. Vous voulez un formulaire personnalisé, ce qui est exactement la raison pour laquelle vous pouvez spécifier le formulaire qui est utilisé. –

+0

Eh bien, j'ai déjà implémenté certaines fonctionnalités dans OrderAdmin, implémenté des actions et remplacé get_changelist_view et get_urls. Il y a aussi un pluggin pour un champ de plusieurs à plusieurs, filtre horizontal, que je voudrais garder. – thodoris

Répondre

0

Je l'emportaient sur get_form enfin comme ça et ça a marché

def get_form(self, request, obj=None, **kwargs): 
    form = super(OrderAdmin, self).get_form(request, obj, **kwargs) 
    form.base_fields['client'].widget = autocomplete.ModelSelect2(url='ordersapp:client-autocomplete') 
    return form