2016-06-11 66 views
1

我已經按照django-autocomplete-light的教程 http://django-autocomplete-light.readthedocs.io/en/master/tutorial.html 但我有以下問題。django-autocomplete-light外鍵形式

我有一個模型

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

如果創建一個形式如在教程

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 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