4
提示我有一個基本的模式自定義部件:Django的 - 與「你的意思是」基於驗證
class MyModel(models.Model):
my_field = models.CharField()
我對這種模式的基本方式:
class MyFrom(forms.ModelForm):
class Meta:
model = MyModel
而且我有一個功能,做一個基本的查詢(在現實中複雜得多,正則表達式等,不會做):
POSSIBLE_VALUES = ['aa', 'bb', 'cc', 'dd']
def lookup(some_value):
if some_value in POSSIBLE_VALUES:
# the value is OK, return a string
return some_value
else:
# constructs the 'did you mean' list of suggestions
didyoumean = [pv for pv in POSSIBLE_VALUES if pv in some_value]
# returns a list which might be empty
return didyoumean
現在,我想要的場景是:
- 在我的「my_field」輸入字段中輸入值,並點擊提交按鈕的網站。
- 如果該值通過查找,我應該自動執行表單的操作。
- 如果我得到多個可能的值,那麼我應該將它們顯示給用戶,並進行任何其他操作。
- 如果我沒有得到答案(一個空列表),我應該得到一個錯誤消息。
一些額外的要求:
- 我寧願「你的意思是」列表中,而無需重新加載頁面顯示。
- 如果用戶點擊我想沒有一個額外的查找執行形式的行動建議之一 - 價值已經得到遏制。
- 我想保留視圖之外的所有邏輯並將其保存在表單中或模型中。這是必須的。
- 我想避免在模板中硬編碼的js和推入形式,如果可能的。這不是必須的。
因此,我假設它將全部分佈在這些字段驗證和一個自定義小部件之間,它將處理「你的意思」列表呈現。我不能把它放在一起。
你的幫助是需要:)
編輯。廣告。 2的要求。 這是我描述的基本特徵。在更高級的一箇中,我希望這個表單有更多的字段,所以「你的意思」列表應該與所有其他字段錯誤(如果有的話)一起顯示。然後點擊提示只需將my_field的值設置爲它的值,而無需重新加載表單。用戶也必須糾正其他錯誤,所以我不能馬上去表單的操作。可能只有一些標誌可以在這兩個選項(「基本」和「高級」)之間切換。
嘿,我最近幾天一直在研究這個問題,並且讓它工作。有些部分是醜陋的,因爲我想讓這個方法可重用,因此需要動態生成東西 - 比如將值從視圖傳遞到表單(創建時),以便它轉到部件的呈現方法。 我修改了一下我的要求,但通常這是我做的(使用jQuery): 1.單擊提交按鈕將表單(序列化)發送到ajax處理視圖。 2.如果表單驗證,我發回一個空值,如果它沒有驗證,那麼我發送回呈現的表單。 – virtuallight 2010-02-05 22:20:39
3.當答案回到js: - 如果爲空,則表單被提交併最終正確處理 - 如果不是空的(帶有錯誤和提示的表單) 4 。點擊一個提示將它的值放入輸入字段,並通過ajax再次驗證表單get。 Thx爲答案。它讓我深信挖掘這個小部件是正確的選擇;) – virtuallight 2010-02-05 22:21:20