我是Django的新手,所以這可能聽起來像一個愚蠢的問題,但請耐心等待。 我已經創建了一個插入記錄到我的數據庫的表單,現在我正在嘗試使用這個表單來更新記錄。但它似乎不能正常工作。 這是我的代碼。如何從Django表更新db記錄
- 我無法弄清楚如何從HTML動態傳遞記錄的ID。當我硬編碼身份證,一切都很好。這是代碼。我試過
action="/task_list/update_task/{{ id }} /"
,它不起作用,URL中出現「/ update_task //」,導致Django引發錯誤信息,因爲沒有找到視圖。理想情況下,我想通過Django的嵌入式ID,而不是模型中的ID,否則我必須在我的模型中手動包含id = models.IntegerField(primary_key=True)
命令,並將其排除在似乎不是「最佳實踐」的形式上,因爲Django有它自己的id。 - 我希望Django通過所選記錄的相應值自動填充文本框,但是它們被呈現爲空白(因此,即使我想要更改其中一個字段,也必須填充所有文本框)。這是我的觀點。
下面是代碼: 網址:
url(r'^task_list/update_task/(?P<task_id>\d+)/$',task_views.updateTask),
查看:
def updateTask(request, task_id):
#cur_usr_sale_point = PersonUnique.objects.filter(employees__employeeuser__auth_user = request.user.id).values_list('agreementemployees__agreement_unique__sale_point_id',flat=True)
selected_task = Tasks.objects.get(id=task_id)
if request.method == 'POST':
task_form = TaskForm(request.POST,instance=task_id)
if task_form.is_valid():
task_form.save();
taskTable = Tasks.objects.all()
return render_to_response('task_management/task_list.html',{'createTask_form':task_form, 'taskTable': taskTable},context_instance=RequestContext(request))
else:
taskTable = Tasks.objects.all()
task_form = TaskForm()
return render_to_response('task_management/task_list.html',{'createTask_form':task_form, 'taskTable': taskTable},context_instance=RequestContext(request))
Django的形式
class TaskForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(TaskForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.error_messages={'required': 'Придется не поленится и заполнить это поле...'}
field.widget.attrs['cl
class Meta:
model=Tasks
fields = '__all__'
exclude=['id']
模板:
{% for task in taskTable %}
<tr>
<td onclick = "updateTaskWindow()"> <span style="display:block;" class="glyphicon glyphicon-pencil"></span></a>
</td>
<td>{{task.description_short}}</td>
</tr>
{% endfor %}
它應該用於更新
的引導模式窗口:
<form class="modal fade" id="updateTaskWindow" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" action="/task_list/update_task/{{ pk }}/" method="post">{% csrf_token %}
<div class="modal-dialog modal-lg form-horizontal" role="form">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="exampleModalLabel">Обновить задачу</h4>
</div>
<div class="modal-body" style="font-size: smaller">
{{ createTask_form.as_p }}
</div>
<div class="modal-footer">
<input class="btn btn-default btn-sm" type="submit" value="Обновить"/>
</div>
</div>
</div>
</form>
型號:
class Tasks(models.Model):
id = models.IntegerField(primary_key=True)
description_short = models.CharField(max_length=500)
description_full = models.TextField()
status = models.ForeignKey(TaskStatus, on_delete=models.CASCADE)
type = models.ForeignKey(TaskType, on_delete=models.CASCADE)
date_start = models.DateTimeField(blank=True, null=True)
date_end = models.DateTimeField(blank=True, null=True)
is_important = models.IntegerField(blank=True, null=True)
effective_from = models.DateTimeField(blank=True, null=True)
effective_to = models.DateTimeField()
class Meta:
managed = False
db_table = 'tasks'
而且JS:
var updateTaskWindow = function() {
$('#updateTaskWindow').modal('show');
}
我花了幾個小時試圖實現這個,但沒有成功。請幫忙 !!!
有點偏離主題 - 我肯定會推薦你檢查基於類的視圖,它可以節省編寫已經在Django中的代碼,並且你的代碼將更短,更好的結構化。嚴重的是,看到這個 - https://docs.djangoproject.com/en/1.9/topics/class-based-views/generic-editing/ – yedpodtrzitko