Python Django中的UpdateView显示空白表单,而不是数据库以前的数据
我正在使用UpdateView使用表单编辑数据 在我点击编辑Python Django中的UpdateView显示空白表单,而不是数据库以前的数据,python,html,mysql,django,forms,Python,Html,Mysql,Django,Forms,我正在使用UpdateView使用表单编辑数据 在我点击编辑弹出窗口后使用模式显示带有空白数据的表单!它不会检索数据库中以前的数据。 有人知道我应该补充什么吗 我被这个编辑困扰了大约一周:( 如果有人有线索,我将不胜感激! 谢谢大家! view.py- from django.shortcuts import render_to_response from django.shortcuts import get_object_or_404 from django.shortcuts import
弹出窗口后
使用模式显示带有空白数据的表单!它不会检索数据库中以前的数据。
有人知道我应该补充什么吗
我被这个编辑困扰了大约一周:(
如果有人有线索,我将不胜感激!
谢谢大家!
view.py-
from django.shortcuts import render_to_response
from django.shortcuts import get_object_or_404
from django.shortcuts import render, redirect
from django.template import RequestContext
from django.views.generic import TemplateView, UpdateView, DeleteView, CreateView
from DevOpsWeb.forms import HomeForm
from DevOpsWeb.models import serverlist
from django.core.urlresolvers import reverse_lazy
from simple_search import search_filter
from django.db.models import Q
class HomeView(TemplateView):
template_name = 'serverlist.html'
def get(self, request):
form = HomeForm()
query = request.GET.get("q")
posts = serverlist.objects.all()
if query:
posts = serverlist.objects.filter(Q(ServerName__icontains=query) | Q(Owner__icontains=query) | Q(Project__icontains=query) | Q(Description__icontains=query) | Q(IP__icontains=query) | Q(ILO__icontains=query) | Q(Rack__icontains=query))
else:
posts = serverlist.objects.all()
args = {'form' : form, 'posts' : posts}
return render(request, self.template_name, args)
def post(self,request):
form = HomeForm(request.POST)
posts = serverlist.objects.all()
if form.is_valid(): # Checks if validation of the forms passed
post = form.save(commit=False)
#if not form.cleaned_data['ServerName']:
#post.servername = " "
post.save()
#text = form.cleaned_data['ServerName']
form = HomeForm()
return redirect('serverlist')
args = {'form': form, 'text' : text}
return render(request, self.template_name,args)
class PostDelete(DeleteView):
model = serverlist
success_url = reverse_lazy('serverlist')
class PostEdit(UpdateView):
model = serverlist
#post = serverlist.objetcs.get(server_id=server_id)
fields = ['ServerName','Owner','Project','Description','IP','ILO','Rack','Status']
success_url=reverse_lazy('serverlist')
url.py-
from django.conf.urls import url, include
from DevOpsWeb.views import HomeView
from DevOpsWeb.views import PostDelete
from DevOpsWeb.views import PostEdit
from django.contrib import admin
admin.autodiscover()
urlpatterns = [
# Examples:
url(r'^$', HomeView.as_view(), name='serverlist'),
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
#DevOpsWeb:8000/Delete/
url(r'^delete/(?P<pk>\d+)/$', PostDelete.as_view(), name="delete_post"),
url(r'^django_popup_view_field/', include('django_popup_view_field.urls', namespace="django_popup_view_field")),
url(r'^admin/', include(admin.site.urls)),
#DevOpsWeb:8000/edit/
url(r'^edit/(?P<pk>\d+)/$', PostEdit.as_view(), name="edit_post"),
]
index.html(带有编辑按钮的部件)-
编辑服务器{{Server.ServerName}
&时代;
{%csrf_令牌%}
{%形式的字段为%}
{{field.errors}}
{{field.html_name}{{field}
{%if field.help_text%}
{{field.help_text|safe}
{%endif%}
{%endfor%}
   
确认
取消
{%endfor%}
文章和编辑按钮:
{% for server in posts %}
<tr>
<div class ="server">
<td></td>
<td><center>{{ server.ServerName }}</center></td>
<td><center>{{ server.Owner }}</center></td>
<td><center>{{ server.Project }}</center></td>
<td><center>{{ server.Description }}</center></td>
<td><center>{{ server.IP }}</center></td>
<td><center>{{ server.ILO }}</center></td>
<td><center>{{ server.Rack }}</center></td>
<td><h4><span class="badge badge-success">{{ server.Status }}</span></h4></td></center>
<td>
    
<button type="button" class="btn btn-outline-danger" data-toggle="modal" href="#delete-server-{{server.id}}"
data-target="#Del{{server.id}}">Delete <i class="fa fa-trash-o"></i></button> 
<button type="button" class="btn btn-outline-primary" data-toggle="modal" href="#edit-server-{{server.id}}"
data-target="#Edit{{server.id}}">   Edit  <i class="fa fa-pencil"></i></button>
 
<div id ="Del{{server.id}}" class="modal fade" role="document">
<div class="modal-dialog" id="delete-server-{{server.id}}">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Delete Confirmation</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form action="{% url 'delete_post' server.id %}" method="post">{% csrf_token %}
<h6>Are you sure you want to delete {{ server.ServerName }}?</h6>
<br>
<center><input type="submit" class="btn btn-danger btn-md" value="Confirm"/>
<button type="submit" class="btn btn-secondary" data-dismiss="modal">Cancel</button></center>
</form>
</div>
</div>
</div>
</div>
<div class="modal fade bd-example-modal-sm" id="Edit{{server.id}}" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Edit Server <b>{{ server.ServerName }}</b> </h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form action="{% url 'edit_post' server.id %}" method="post"> {% csrf_token %}
<!--<center> {{ form.as_p }} </center> -->
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
<!-- {{ field.label_tag }} -->
<small><b>{{ field.html_name }}<p align="left"></b> {{ field }}</small> </p>
{% if field.help_text %}
<p class="help">{{ field.help_text|safe }}</p>
{% endif %}
</div>
{% endfor %}
</div>
<div class="wrapper">
      
<h2><button type="submit" class="save btn btn-success btn-lg">Confirm</button></h2>   
<h2><button type="submit" class="btn btn-secondary btn-lg" data-dismiss="modal">Cancel</button></h2>
</div>
</form>
</td>
</div>
</tr>
{% endfor %}
</tbody>
</h5>
</table>
{%用于posts%中的服务器]
{{server.ServerName}}
{{server.Owner}
{{server.Project}
{{server.Description}
{{server.IP}
{{server.ILO}
{{server.Rack}
{{server.Status}
  
删除
  编辑
 
删除确认
&时代;
{%csrf_令牌%}
确实要删除{{server.ServerName}吗?
取消
编辑服务器{{Server.ServerName}
&时代;
{%csrf_令牌%}
{%形式的字段为%}
{{field.errors}}
{{field.html_name}{{field}
{%if field.help_text%}
{{field.help_text|safe}
{%endif%}
{%endfor%}
   
确认
取消
{%endfor%}
您没有使用要更新的实例初始化表单:
form = HomeForm()
相反,当您希望用对象中的数据填充表单时:
form = HomeForm(instance=my_object_to_update)
由于您希望对在HomeView
中显示的每个post
执行此操作,因此除了创建空的HomeForm()之外,还需要为post
中的HomeView.get()
和HomeView.post()
方法中的每个post
初始化一个不同的表单
用于创建新的serverlist
:
for post in posts:
forms[post.id] = HomeForm(instance=post)
并且在模板呈现中(假设您的循环{%for server in posts%}
)
由于您有一个模板可以创建新的serverlist,但也可以显示所有现有的serverlist对象并更新它们,因此您需要这两种表单。因此,除了创建表单HomeForm()
之外,还需要创建上面的forms
dict。您的上下文应该具有:
args = {
'form': form, # this is the serverlist creation form (empty)
'forms': forms, # these are all the forms for existing instances
'posts': posts}
另外,我看不到在你的
PostEdit
中你在哪里指定了你的form_类
,这是更新视图
工作所必需的。不太理解你的视图.py
:类HomeView
在哪里?你的get()
和post()
函数不在类中…您是否确实试图在常规HomeView
中嵌入多个PostEdit
视图?函数get and post位于HomeView类别下
for post in posts:
forms[post.id] = HomeForm(instance=post)
{% with server.id as id %}
{% with forms|get_by_key:id as edit_form %}
<form action="{% url 'edit_post' server.id %}" method="post">
... display the form: your current code {% for field in edit_form %} etc...
</form>
{% endwith %}
{% endwith %}
@register.filter(name='get_by_key')
def get_by_key(dictionnary, key):
"""Return element in dictionnary corresponding to `key`."""
return dictionnary[key] if isinstance(dictionnary, dict) else ''
args = {
'form': form, # this is the serverlist creation form (empty)
'forms': forms, # these are all the forms for existing instances
'posts': posts}