2017-03-09 52 views
0

字段我已經以下django的模型:Django表單 - 顯示基於請求參數

class OrderLog(models.Model): 
    order = models.ForeignKey(Order) 
    entry = models.TextField() 
    private = models.BooleanField(default=False) 

和相關形式:

class OrderLogForm(forms.ModelForm): 
    class Meta: 
     model = OrderLog 
     fields = ('entry', 'order', 'private') 

。我如何根據請求參數修改fields參數?因此,如果用戶是testuser,那麼字段元組只包含前2個元素,在其他情況下則包含3個元素。可以通過表單本身以某種方式訪問​​請求嗎?

謝謝。

+0

ü可能要檢查這個http://stackoverflow.com/questions/1057252/how-do-i-access-the-request-object-or- any-other-variable-in-a-forms-clean-met –

回答

0

其更好地傳遞只需要(在這種情況下request.user)的對象,而不是將整個request對象。

這裏是一個可能的解決方案:

class OrderLogForm(forms.ModelForm): 
    class Meta: 
     model = OrderLog 
     fields = ('entry', 'order', 'private') 

    user = None 

    def __init__(self, *args, **kwargs): 
     self.user = kwargs.pop('user') 
     super(OrderLogForm, self).__init__(*args, **kwargs) 
     if self.user.username == 'testuser': 
      del self.fields['private'] 
0

覆蓋它的初始化是這樣的:

class OrderLogForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     # expects a request object to be passed in initially 
     self.r = kwargs.pop('request') 
     super(FrageForm, self).__init__(*args, **kwargs) 

    if 'value' in self.r: 
     self.fields["field1"] = forms.CharField(initial=None) 
    else: 
     self.fields["field1"] = forms.CharField(initial=None) 
     self.fields["field1"] = forms.CharField(initial=None) 
+0

傳遞請求參數可以正常工作,謝謝,但是設置字段並不是真的。如果我在init方法中嘗試它,我知道表單沒有fields屬性。如果我在init方法之外嘗試它,我得到那個自己不存在。 – user2194805

+0

啊,對不起,現在它可以工作,只需將「if」部分移動到__init__中? – user2194805