2014-11-23 35 views
0

我的問題可能會被清除。所以請閱讀示例。我正在使用python 3.4和django 1.7使用clean()方法在django的form.py中訪問undefined表單數據

我正在從表單選擇字段接收外鍵。未清理的數據給了我外部元素的id,但是清理過的數據給了我外部元素的名稱str()。

我希望外國元素的對象通過與窗體的另一個清理數據進行比較來驗證其另一個屬性。

例如,我有一個研究所模型,其中包含一個private_key(CharField)。 現在,我有一個教師模型,其中包含Institute作爲ForeignKey,並且需要在註冊期間驗證private_key。

注:PRIVATE_KEY是類型CharField

在形式登記爲老師的變量名,研究所作爲ForeignKey的未來與含有由用戶給出PRIVATE_KEY輸入Charfield沿。

我必須檢查用戶的private_key輸入和private_key存儲在選定的研究所model.If他們不相同,然後引發「無效私鑰」錯誤。

我在form.py中使用clean()方法(在我自定義註冊表單的類中)。但在那裏,我只清理了數據。清潔數據給我的是研究所的名稱而不是研究所的名稱。

怎麼辦?

如果我的問題不好,請給出回答/評論與理由,而不是隻聲音說話。

+0

請提供一些代碼片段以清楚地理解您的問題 – 2014-11-23 03:33:43

+0

我無法提供任何代碼,因爲1)我的來得很複雜,因爲它在同一視圖類中處理多種形式。 2)我必須在我的網站中使用它。這不是一個開放源代碼或練習代碼 – 2014-11-23 03:56:13

回答

0

如果您使用ModelForm,那麼您應該直接獲取與外鍵相關的對象。所以,你可以在清理的數據做的是:

def clean(self): 
    p_key= self.cleaned_data['private_key'] 
    institute= self.cleaned_data['institute'] 
    if p_key == institute.private_key : 
     return super().clean() 
    else: 
     raise ValidationError('Invalid key') 

如果使用Form,那麼你應該得到機構ID在你清理的數據。

+0

我正在使用ModelForm。但是private_key不是我的教師模型的一部分。我定製了我的模型表單並插入名爲private_key.Function的Charfield clean_private_key(self)對我來說不起作用。請給你任何其他解決方案? – 2014-11-23 04:37:59

+0

謝謝,它的工作;) – 2014-11-23 04:52:57

+0

如果我能我會upvote它。所以在評論+1 :) – 2014-11-23 04:55:14

相關問題