如何根据用户选择设置表单中的输入以具有默认值Django

时间:2016-02-23 11:09:57

标签: python django django-urls

我正在使用Django创建一个应用程序。我有一个对象列表,用户可以选择一个对象并转到包含该对象详细信息的页面,然后他们可以更改这些详细信息。但是,此时,用于更改详细信息的表单会要求用户在更改详细信息之前输入对象的名称。我希望它已经输入了一个默认值,这个默认值应该是用户在上一页上选择和查看的默认值,即用户选择' object1',他们会转到表单来更改信息对于对象1'在该表单的顶部有一个标签,上面写着对象名称'输入框中有' object1'在没有用户做任何事情的情况下。这是我的一些代码,我希望这一切都有意义。有没有人对我如何做到这一点有任何建议?我认为我可以使用RESTful API网址,因此网址可能类似/details/2/change_date,那么它可能会访问ID 2的名称吗?

Urls.py

urlpatterns = [
    url(r'^details/$', Info.as_view(), name="server_details"),
    url(r'^details/([0-9]+)/$', GetDetails.as_view(), name="details"),
    url(r'^change_date/$', ChangeDateFormView.as_view(), name="change_date"),
]

Views.py

class ChangeDateFormView(FormView):

def get_form_class(self):
    return ChangeDateForm

def get_template_names(self):
    return 'change_date.html'

# Renders a form on GET and processes it on POST.
def get(self, request, *args, **kwargs):
    form_class = self.get_form_class()
    form = self.get_form(form_class)
    return self.render_to_response(self.get_context_data(form=form))

def post(self, request, *args, **kwargs):
    form_class = self.get_form_class()
    form = self.get_form(form_class)
    if form.is_valid():
        form_data = form.cleaned_data
        name = form.data['name']
        new_date = form_data['new_date']
        confirm_new_date = form_data['confirm_new_date']

        if new_date != confirm_new_date:
            form._errors["new_date"] = "Dates do not match"
            return self.form_invalid(form)

        elif MyObjects.objects.filter(name=name).exists():
            MyObjects.objects.filter(name=name).update(date=new_date)
            return render(request, 'change_data_success.html', {})

        else:
            form.errors['name'] = "doesn't exists"
            return self.form_invalid(form)
    else:
        return self.form_invalid(form)

模板

<form action="{% url "change_date" %}" method="post">
     {% csrf_token %}
     <div class="form-group cf">
        <label for="name" class="col-sm-4 control-label">name:</label>
        <div class="col-sm-8">
            {% render_field form.name type="name" class+="form-control" placeholder="name" %}
            <span style="color: #FF0000">{{ form.name.errors }}</span>
        </div>
    </div>
    <div class="form-group cf">
        <label for="date" class="col-sm-4 control-label">New date:</label>
        <div class="col-sm-8">
            {% render_field form.new_date type="date" class+="form-control" %}
            <span style="color: #FF0000">{{ form.new_date.errors }}</span>
        </div>
    </div>
    <div class="form-group cf">
        <label for="confirm date" class="col-sm-4 control-label">Confirm date:</label>
        <div class="col-sm-8">
            {% render_field form.confirm_new_date type="date" class+="form-control" %}
            <span style="color: #FF0000">{{ form.confirm_new_date.errors }}</span>
        </div>
    </div>
    <div style="text-align: center">
        <button type="submit" class="btn btn-default">Submit</button>
    </div>
</form>

1 个答案:

答案 0 :(得分:0)

我设法使用RESTful URL。 https://realpython.com/blog/python/django-rest-framework-quick-start/

然后我的change_details页面可以使用详细信息页面使用的ID。