在我的專案中,有一個表單和一個帶有復選框的表格,根據在表單和復選框中輸入的資料,我填寫了 2 個資料庫并將用戶重定向到顯示來自一個表格的資訊的頁面,一切都很好在我開始編輯記錄之前,我決定用 來做UpdateView,傳入 template_name 與添加記錄之前相同的模板:
這是添加功能和編輯類:
class CampaignEditor(UpdateView):
model = Campaigns
template_name = 'mailsinfo/add_campaign.html'
form_class = CampaignsForm
def add_campaign(request):
if request.method == 'POST':
addCampaignDataToDB(request.POST)
data = list(Emails.objects.values())
data = MailsTableWithoutPass(data)
form = CampaignsForm()
data_ = {
'form': form,
'data': data
}
return render(request, 'mailsinfo/add_campaign.html', data_)
但是當呼叫 url 來更改我的資料表是空的并且那里沒有選中的復選框時,表單的所有處理作業正常
這是我使用的模板,以及將資料寫入表的函式:
<div>
<div class="container-campaign">
<div class="campaign-form">
<form method="post" id="newCampaign">
{% csrf_token %}
{{ form.name }}<br>
{{ form.subject }}<br>
{{ form.body }}<br>
{{ form.user_guid }}<br>
</form>
</div>
<div class="campaign-table">
<table
id="table"
data-height="480"
class="table table-dark">
<thead>
<tr name="mails-info">
<th data-field="state" data-checkbox="true"></th>
<th data-field="id">ID</th>
<th data-field="email">Email</th>
<th data-field="source">Source</th>
<th data-field="created_at">Created at</th>
<th data-field="modified_at">Modified at</th>
</tr>
</thead>
</table>
</div>
</div>
<script>
var $table = $('#table')
$(function() {
var data = {{data|safe}}
$table.bootstrapTable({data: data})
})
</script>
<button id="button2" class="btn btn-success" type="submit" style="margin-left: 2%">Save campaign</button>
</div>
<script>
var table = $('#table')
var button = $('#button2')
$(function() {
button.click(function () {
ids = []
for( i in table.bootstrapTable('getSelections')){
ids.push(table.bootstrapTable('getSelections')[i].id)
}
console.log(ids)
var form = $('#newCampaign')[0];
var formData = new FormData(form);
formData.append("IDs", ids);
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: '',
data: formData,
processData: false,
contentType: false,
dataType: 'text/json',
success: function(){ alert("All ok") },
error: function() {
window.location.replace('..');
}
});
})
})
</script>
def addCampaignDataToDB(req):
mails_id = req
print(mails_id)
formCampaigns = CampaignsForm(req)
IDs = req['IDs']
if IDs != '':
IDs_list = IDs.split(',')
user_guid = req['user_guid'][0]
for i in IDs_list:
CampaignEmail.objects.create(email_guid=int(i), campaigne_guid=int(user_guid))
if formCampaigns.is_valid():
formCampaigns.save()
呼叫這個url時有什么方法嗎:
path('editCampaign/<int:pk>', views.CampaignEditor.as_view(), name='editCampaign')
,除了記錄的表格,還接收帶有可編輯復選框的資料表?
如果我沒有提供任何資訊或解釋不清楚,我提前道歉
uj5u.com熱心網友回復:
您沒有將任何附加資料傳遞給更新表單。更新視圖是獨立的,不會從 add-campaign 視圖繼承資料,因此如果您需要額外的背景關系,您可以:
class CampaignEditor(UpdateView):
model = Campaigns
template_name = 'mailsinfo/add_campaign.html'
form_class = CampaignsForm
def get_extra_context(self):
//call the super context from the parent class
context = super().get_context_data(*args, **kwargs)
data = list(Emails.objects.values()) #you may want to further filter for update purposes
data = MailsTableWithoutPass(data)
context['data'] = data
return context
我不確定有多少表單是由 javascript 創建的 - 可能值得記住 django 模板是在服務器端完成的,所以如果你需要填充由 JS 客戶端創建的欄位,你需要把它們的值在某處作為 JS 變數,您可以稍后參考,例如,
<script>
{% for field in form %}
{{field.name}} = "{{field.value}}"
{% endfor %}
<script>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530733.html
