2010-11-03 54 views
4

我希望表單僅顯示當前用戶在ChoiceField中的帳戶。我試圖做到以下,但它不起作用。限制基於用戶的字段選擇

編輯:對不起,我忘了提及因爲TransForm()沒有顯示任何字段而添加的「if kwargs」。我想這是錯誤的,但我不知道另一種方式。

views.py:

def in(request, account): 
    if request.method == 'POST': 
     form = TransForm(request.user, data=request.POST) 
     if form.is_valid(): 
      ... 

    else: 
     form = TransForm() 

    context = { 
      'TranForm': form, 
    } 
    return render_to_response(
     'cashflow/in.html', 
     context, 
     context_instance = RequestContext(request), 
) 

forms.py:

class TransForm(ModelForm): 
    class Meta: 
     model = Trans 

    def __init__(self, *args, **kwargs): 
     super(TransForm, self).__init__(*args, **kwargs) 
     if kwargs: 
      self.fields['account'].queryset = Account.objects.filter(user=args[0]) 
+1

'不起作用'是什麼意思?你沒有選擇?你太多了? – 2010-11-03 22:54:05

+0

並嘗試使用.choices而不是.queryset,因爲queryset可能已經被那個點計算了 – 2010-11-03 22:54:51

+0

我的意思是我得到所有帳戶,而不僅僅是用戶帳戶。 – mfalcon 2010-11-03 23:07:47

回答

4

您還需要正確初始化表單當請求NO POST請求:

if request.method == 'POST': 
    form = TransForm(user=request.user, data=request.POST) 
    if form.is_valid(): 
     ... 

else: 
    form = TransForm(user=request.user) 
... 

,此外我建議你調用父類的構造函數時刪除新的參數:

class TransForm(ModelForm): 
    class Meta: 
     model = Trans 

    def __init__(self, *args, **kwargs): 
     user = kwargs.pop('user') 
     super(TransForm, self).__init__(*args, **kwargs) 
     self.fields['account'].queryset = Account.objects.filter(user=user) 
+0

謝謝!,用戶= kwargs.pop('用戶')行是解決我的問題。 – mfalcon 2010-11-04 00:09:42

1

在forms.py試試這個:

class TransForm(ModelForm): 
    class Meta: 
     model = Trans 

    def __ini__(self, user, *args, **kwargs): 
     super(TransForm, self).__init__(*args, **kwargs)  
     qs = Account.objects.filter(user=user) 
     self.fields['account'] = ModelChoiceField(queryset=qs) 

我假設你已經進口形式from django.forms import *

我不知道究竟是什麼造成您的問題,但我懷疑兩件事情(很可能是兩者):

  1. 要調用了意想不到的參數(用戶)的超類的構造函數。
  2. ModelChoiceField上的選擇是在字段的構造函數運行時確定的,該構造函數作爲超類的構造函數的一部分運行,在這種情況下,在事件對選項沒有影響後設置查詢集。
相關問題