我正在根据“ Django示例”一书中的说明构建自己的项目。
但是我陷入了django如何使用URL参数初始化输入表单字段的问题?
#models.py
class Image(models.Model):
title = models.CharField(max_length=200)
description = models.TextField(blank=True)
url = models.URLField()
(...)
#views.py
def image_create(request):
if request.method == 'POST':
form = ImageCreateForm(data=request.POST)
(...)
else:
form = ImageCreateForm(data=request.GET)
return render(request,
'create.html',
{'form': form})
#forms.py
class ImageCreateForm(forms.ModelForm):
class Meta:
model = Image
fields = ('title', 'url', 'description')
widgets = {
'url': forms.HiddenInput,
}
#create.html
{% extends "base.html" %}
{% block content %}
<h1>Bookmark an image</h1>
<img src="{{ request.GET.url }}" class="image-preview">
<form action="." method="post">
{{ form.as_p }}
{% csrf_token %}
<input type="submit" value="Bookmark it!">
</form>
{% endblock content %}
我找不到明确指示要获取request.GET参数并将它们中的每一个分配给相应输入字段的任何特定代码行。我认为所有这些都与在线初始化:form = ImageCreateForm(data=request.GET)
views.py中的表单有关。
这两者之间有什么区别(因为两者似乎都以相同的方式工作,除了后者在输入字段值中返回list之外):
form = ImageCreateForm(data=request.GET)
form = ImageCreateForm(initial=request.GET)
1)是的-request.GET仅仅是一个精美的字典(从技术上来说就是QueryDict),并且形式“ data”参数需要一个字典,该字典具有与表单中的字段相对应的键。从技术上讲,如果字典具有代表字段的正确键,则可以将其传递给任何字典。
2)一般来说,模型/表单字段与url参数之间没有关系。但是,如果您使用某些基于类的视图(例如DetailView),并且在URL中设置了一个slug或id,它将把值传递给视图并将其映射到对象slug或id。以下链接中的get_object()方法有一个示例。
https://ccbv.co.uk/projects/Django/1.9/django.views.generic.detail/DetailView/
3)表单的data属性是提交(通常是POST)到表单的内容,而初始值是在第一页加载时传递给表单的内容。例如,如果您正在编辑对象,则通常现有的对象数据将填充初始值。然后,如果您对表单进行过POST编辑,则它将作为数据传递。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句