我有一个用户输入位置信息的表单。我正在尝试创建一个更新表单,以便用户可以单击某个位置上的更新按钮,更新表单将填充该位置已有的数据。我已经跟踪了Django文档,但我得到了一个空白屏幕。我不确定如何让它参考更新的位置。这是我目前所拥有的。
模型.py
class Location(models.Model):
# Details on location
视图.py
def locations(request):
return render_to_response('locations/locations.html', {'locations': Location.objects.all() })
def location(request, location_id=1):
return render_to_response('locations/location.html', {'location': Location.objects.get(id=location_id) })
def create(request):
if request.POST:
form = LocationForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/loggedin/locations/all/')
else:
form = LocationForm()
args = {}
args.update(csrf(request))
args['form'] = form
return render_to_response('locations/create_location.html', args)
def edit_location(request):
if request.POST:
form = LocationUpdate(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/loggedin/locations/all/')
else:
form = LocationUpdate()
args = {}
args.update(csrf(request))
args['form'] = form
return render_to_response('locations/location_update.html', args)
表单.py
from django.views.generic.edit import UpdateView
from models import Location
class LocationForm(forms.ModelForm):
class Meta:
model = Location
exclude = ('timestamp', 'updated')
class LocationUpdate(UpdateView):
model = Location
template_name_suffix = '_update_form'
网址.py
url(r'^accounts/loggedin/location/update/$', 'assessments.views.edit_location'),
位置更新.html
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="update" />
</form>
</body>
</html>
或者应该放在location.html中。如果我把它加进去,就会得到一个CSRF verification failed
错误
<div class="row">
<div class="col-md-4">
<dl class="dl-horizontal">
<dt>ID:</dt>
<dd>{{ location.id }}</dd>
<br />
<dt>Company:</dt>
<dd>{{ location.company }}</dd>
<dt>Address:</dt>
<dd>{{ location.address }}</dd>
<dt>Town:</dt>
<dd>{{ location.town_city }}</dd>
<dt>County:</dt>
<dd>{{ location.county }}</dd>
<dt>Telephone:</dt>
<dd>{{ location.tel }}</dd>
###### ect #####
</div>
</div>
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="update" />
</form>
我看到一些问题:
如果要使用更新视图,则不需要将其包装到另一个视图中或将其用作表单,它完全是自包含的。
在您的
views.py
中(不是forms.py
):在您的
urls.py
中:如果这样连接,则需要使用要更新的location对象的主键调用update视图。这将确保表单中填充了数据;因此像这样调用它
<a href="{% url 'location-update' pk=1 %}">update location id 1</a>
。如果不想使用基于类的视图,则应更新视图以首先加载数据、填充表单,然后将表单发送给用户,与上面的UpdateView一样,您需要传入主键(或其他引用)以加载要为其编辑记录的对象:
相关问题 更多 >
编程相关推荐