我是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