如何在Django中用数据库存储的值自动填充表单模板?
我想把已经存储在数据库里的值填充到我的 edit_post.html 页面中。
我的编辑链接是 http://hostname/edit_Post/960
。这里的 "960" 是我数据库中某个项目的 ID。我用这个 ID 来请求更新它的内容。
我希望内容能显示在这里:
edit_Post.html
<form id="category_form" method="post" action="/edit_Post/">
{% csrf_token %}
{% for field in form.visible_fields %}
{{ field.errors }}
<input type="text" placeholder='{{ field.help_text }}'>
{% endfor %}
<input type="submit" name="submit" value="Create Post" />
</form>
urls.py
url(r'^edit_Post/(?P<id>\d+)', 'blog.views.edit_Post'),
forms.py
class addPostForm(forms.ModelForm):
title = forms.CharField(max_length=128, help_text="Please enter the title ")
author = forms.CharField(max_length=128, help_text="Please enter the Author ")
bodytext = forms.CharField(max_length=128,
help_text="Please enter the Body",
required=False)
# An inline class to provide additional information on the form.
class Meta:
# Provide an association between the ModelForm and a model
model=posts
fields = ('title', 'author','bodytext')
最后是 views.py
def edit_Post(request, id):
context = RequestContext(request)
instance=posts.objects.get(id=id)
form = addPostForm(instance=instance)
if request.method == "POST":
form = addPostForm(request.POST,instance=instance)
if form.is_valid():
form.save(commit=True)
confirmation_message = "Post information updated successfully!"
return HttpResponseRedirect('/home')
else:
print form.errors
else:
form=addPostForm(instance=instance)
return render_to_response('edit_Post.html', {'form': form}, context)
我的 model.py
class posts(models.Model):
author = models.CharField(max_length = 30)
title = models.CharField(max_length = 100)
bodytext = models.TextField()
timestamp = models.DateTimeField(default=datetime.now, blank=True)
2 个回答
-1
Django 提供了CRUD(创建 -> CreateView,删除 -> DeleteView,更新 -> UpdateView,详情 -> DetailView)视图。如果可以的话,尽量使用这些视图。
你可以在一个类的 views.py 文件中修改你的方法。
class PostDetail(DetailView):
model = posts
form_class = addPostForm
template = "edit_post.html"
然后你可以在这里添加方法哦 :)。
1
Django 本来会自动处理这个问题,如果你没有绕过它输出字段的机制。在你的模板中,你应该这样做:
{% for field in form.visible_fields %}
{{ field.errors }}
{{ field }}
{% endfor %}
如果你想保留占位符的功能,可以在表单类里面添加这个:
class addPostForm(forms.ModelForm):
title = forms.CharField(max_length=128, widget=forms.TextInput(attrs={'placeholder': 'Please enter the title'}))