2016-06-11 12 views
1

私はdjango-autocomplete-lightのチュートリアルに従いました http://django-autocomplete-light.readthedocs.io/en/master/tutorial.html 私は次の質問があります。django-autocomplete-lightの外部キー形式

チュートリアル

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

で説明したように、私は、フォームを作成し、admin.py

class OrderAdmin(admin.ModelAdmin): 
    form = OrderForm 

に、私は望ましい結果を取得する場合、私は、モデル

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

を持っていますそれは提出されたクライアントのために自動完成です。

しかし、私は、フォームを作成し、クライアントフィールドのオートコンプリートウィジェットを持つ方法がある

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

代わりに使用したくない場合は? 私は助けていただきありがとうございます。

+1

を働きました。あなたがそれが動作していることを指定した方法は、それを行う標準的な方法です。フォームを作成したくない理由はありますか? – denvaar

+0

作成しているModelAdminクラスのget_formをオーバーライドすることはできますが、今はあなたがそれをやっているように、より洗練され理解しやすくなります。 ModelAdminクラスは、モデルに基づいて標準のカスタマイズされたフォームを作成します。カスタマイズされたフォームが必要です。これは、使用されるフォームを指定できる正確な理由です。 –

+0

さて、私はすでにOrderAdminにいくつかの機能を実装しています。実装されたアクションと上書きされたget_changelist_viewとget_urlsです。また、私が保持したいと思っている、水平方向にフィルタリングする多対多フィールド用のプラグインもあります。 – thodoris

答えて

0

私は最終的に上書きし、このようget_form、それはあなたが実際に使用するためのフォームを提供せず、管理フォームをカスタマイズすることができますようにそれはいないようです

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