2017-01-07 42 views
0

我有這個urls.py如何爲當前對象的篩選上的FormView

... 
    url(r'^storageitem/(?P<pk>[\w]+)/merge/$', login_required(
     StorageItemMergeView.as_view()), name='storage_item_merge'), 
... 

與此view.py

... 
class StorageItemMergeView(FormView): 
    form_class = MergeStorageItemsForm 
    success_url = reverse_lazy('storage_item_list') 
    template_name = 'pmgmt/storageitem/merge.html' 
... 

由於URL可能看起來像本地主機:8000/storageitem/155 /合併/我想從表格中排除155。我試圖定義一個自定義查詢集

queryset = StorageItem.objects.exclude(pk=kwargs["pk"]) 

但是kwargs似乎並沒有出現在這一點上。

... 
    queryset = StorageItem.objects.exclude(pk=kwargs["pk"]) 
NameError: name 'kwargs' is not defined 

什麼是正確的方式來創建一個基於模型與所有項目旁邊的當前一個?在你的表單字段

def get_form_kwargs(self): 
    kwargs = super(ItemCreate, self).get_form_kwargs() 
    kwargs.update({ 
     'exclude_pk' : self.kwargs['pk'] 
    }) 
    return kwargs 

和過濾的queryset這樣的:

回答

0

您可以添加get_form_kwargs方法到您的視圖

class MergeStorageItemsForm(Form): 
    # Form fields 
    def __init__(self, *args, **kwargs): 
     exclude_pk = kwargs.pop('exclude_pk') 
     super(FooForm, self).__init__(*args, **kwargs) 
     if exclude_id: 
      self.fields['some_field'].queryset = self.fields['some_field'].queryset.exclude(pk=exclude_pk)