我正在嘗試在 django 中顯示一個表單并動態預填充它。我希望我的示例新聞收集站點的用戶修改條目。
我有我的手動輸入表單類
#forms.py
class ManualInputForm(forms.Form):
source = forms.CharField(label="Source:", widget = forms.TextInput(attrs={'size': 97}))
topic = forms.CharField(label="Topic:", widget = forms.TextInput(attrs={'size': 97}))
news = forms.CharField(widget = forms.Textarea(attrs={"rows":5, "cols":100}))
link = forms.CharField(label="Link (optional):", required = False, widget = forms.TextInput(attrs={'size': 97}))
在 HTML 中,我將手動執行,因為我想使用來自views.py.
#html file
<form method="post" class="form-group">
{% csrf_token %}
<div class="input-group mb-3">
<div class="container">
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}
<br>
{{ field }}
</div>
{% endfor %}
</div>
<div class="input-group">
<p> </p>
<button type="submit" class="btn btn-success" name="Submit">Save</button>
</div>
</div>
</form>
我該怎么做?這讓我發瘋了 oO 我想繼續使用 django 的表單,因為它集成了錯誤管理器(并非所有欄位都是必需的,但有些欄位是必需的,我希望 django 繼續管理它)。
感謝您的建議!
編輯:根據要求,我將發布 views.py 相關功能:
#views.py
def editnews(response, id):
form = ManualInputForm(response.POST or None)
#tableToView is a dataframe retrieved by querying an external DB
#data cannot be stored in django's buit in because of reasons ;-)
#checking the dataframe is correct and it is:
#IT IS MADE OF A SINGLE LINE
print(tableToView)
#THIS IS PROBABLY NOT THE WAY TO DO IT
form.source = tableToView.loc[0, 'Source']
form.topic = tableToView.loc[0, 'Topic']
form.news = tableToView.loc[0, 'News']
form.link = tableToView.loc[0, 'Link']
return render(response, 'manual/editnews.html', {"form":form})
在影像中,文本應預先填充。

uj5u.com熱心網友回復:
嘗試這樣的事情:
def editnews(response, id):
data = {k.lower(): v for k, v in tableToView.loc[0].to_dict().items()}
form = ManualInputForm(response.POST or None, initial=data)
return render(response, 'manual/editnews.html', {'form': form})
uj5u.com熱心網友回復:
當您在視圖中宣告或呈現表單并將其發送到模板時。使用初始引數并在其中傳遞字典,鍵作為欄位名稱,值作為您想要預填充的文本。
像這樣 context['form'] = NameofForm(initial={'Source':'mysite', 'Topic':'mytopic'}) 回傳背景關系
更新
> def test_view(request, pk):
> template_name = 'form.html'
> form = MyForm(initial={"test":"initialize with this value"})
> if request.method == 'POST':
> form = MyForm(request.POST)
> if form.is_valid():
> form.save()
> return HttpResponseRedirect(reverse('list-view'))
>
> return render(request, template_name, {'form': form})
uj5u.com熱心網友回復:
試試這個:
#views.py
def editnews(response, id):
data = {}
data["source"] = tableToView.loc[0, 'Source']
data["topic"] = tableToView.loc[0, 'Topic']
data["news"] = tableToView.loc[0, 'News']
data["link"] = tableToView.loc[0, 'Link']
form = ManualInputForm(response.POST or None, initial=data)
return render(response, 'manual/editnews.html', {"form":form})
uj5u.com熱心網友回復:
如果您正在使用 jQuery,則可以使用 jQuery 來完成。您需要將 id 的屬性設定為表單欄位。
jQuery 代碼示例:
$('#topic').val("Prefilled text goes here");
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/396963.html
標籤:javascript Python 姜戈
下一篇:Django中的查詢集
