我正在使用 Django 開發(fā)一個(gè)字典應(yīng)用程序。我在使用 Django 類成功創(chuàng)建表單時(shí)遇到問題,該類允許用戶向現(xiàn)有和ModelForm新詞典詞條提交新定義。我的模型.py:class Headword(models.Model): headword = models.CharField(max_length=64, unique=True)class Definition(models.Model): definition = models.CharField(max_length=64) headword = models.ForeignKey(Headword, related_name="definitions_headword")我的forms.py:class DefinitionForm(forms.ModelForm): class Meta: model = Definition fields = ["headword", "definition"]我的 HTML 表單:<form action="{% url 'dictionary:define' %}" method="post"> {% csrf_token %} {{ form }} <button type="submit">Define</button></form>所有的結(jié)果是一個(gè)表格:包含數(shù)據(jù)庫中已有的所有詞條的下拉菜單,定義的文本輸入字段,提交按鈕。因此,使用上述代碼,僅允許用戶向已存在的詞條添加定義。正如我所說,我想改變這一點(diǎn)并采用這種形式,以便用戶能夠向現(xiàn)有詞條(下拉菜單中的詞條)和新詞條(用戶只需輸入的詞條)提交定義。這意味著我根本不需要表單中的下拉菜單,而只需要兩個(gè)不受約束的文本輸入字段和一個(gè)提交按鈕。我怎樣才能做到這一點(diǎn)?widgetsPS:我嘗試使用類中的字典將下拉菜單覆蓋為文本輸入字段DefinitionForm。然而,當(dāng)我嘗試提交表單時(shí),這會導(dǎo)致標(biāo)題表單字段上方出現(xiàn)一條錯(cuò)誤消息:選擇一個(gè)有效的選擇。該選擇不是可用的選擇之一。
1 回答

慕碼人8056858
TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
由于您有一個(gè)外鍵類型字段,它會自動(dòng)將小部件更改為下拉列表,因此我會將這一更改保留在小部件字典中。
看起來您正在尋找多對多關(guān)系。查看 Django 文檔并查找表單集和內(nèi)聯(lián)表單集。
但是,如果您打算在創(chuàng)建定義的同時(shí)創(chuàng)建新的中心詞,那么這部分就有點(diǎn)棘手了。
為了進(jìn)行測試,請嘗試將該字段更改為常規(guī)文本輸入,以 CSV(或其他易于解析的其他內(nèi)容)形式提交詞條數(shù)據(jù)并對其進(jìn)行解析。對于每個(gè)結(jié)果,如果詞條不存在,您可以在數(shù)據(jù)庫中創(chuàng)建它,然后關(guān)聯(lián)定義。如果確實(shí)如此,您只需將其關(guān)聯(lián)即可。
如果它有效,下一步就是找到一個(gè)允許您遵循相同思維方式的小部件 - 我想不出任何,抱歉:/
添加回答
舉報(bào)
0/150
提交
取消