从Django中的url参数初始化表单输入字段

时间:2016-07-26 02:12:57

标签: python django forms django-forms

我正在根据' Django by Example'的说明构建我自己的项目。书。

但是我坚持 django如何使用网址参数初始化输入表单字段

#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参数的特定代码行,并将它们分配给相应的输入字段。 我假设所有这些都与在线表单初始化有关:在views.py

form = ImageCreateForm(data=request.GET)

问题:

  1. 有人可以解释一下django如何使用request.GET参数来初始化输入字段值(为它们分配URL参数&#39;值)? 它是否只是匹配,对于每个request.GET键,相应的输入字段&quot; name&#39;属性,然后在request.GET?
  2. 中为该特定输入字段分配与该键对应的值
  3. 也有人可以确认模型/表单(哪一个?)字段名称与URL参数之间是否存在关系?
  4. 这两者之间有什么区别(因为它们似乎都以相同的方式工作,除了后者在输入字段值中返回列表):

    form = ImageCreateForm(data=request.GET)

    form = ImageCreateForm(initial=request.GET)

1 个答案:

答案 0 :(得分:0)

1)是 - request.GET只是一个花哨的字典(技术上是一个QueryDict),形式“data”参数需要一个带有与表单中字段对应的键的字典。如果表格中有正确的键,你可以从技术上传递任何字典。

2)一般来说,模型/表单字段和url参数之间没有关系。但是,如果您在网址中设置了一个slug或id,则使用某些基于类的视图(例如DetailView),它会将值传递给视图并将其映射到对象slug或id。下面链接中的get_object()方法有一个示例。

https://ccbv.co.uk/projects/Django/1.9/django.views.generic.detail/DetailView/

3)表单的数据属性是提交(通常是POST)到表单的内容,而初始值是在第一次页面加载时传递给表单的值。例如,如果您正在编辑对象,通常现有的对象数据将填充初始值。然后,如果您将编辑内容发布到表单,它将作为数据传递。