0

我是 django 的新手,为了练习,我正在尝试编写我自己版本的所有熟悉的“待办事项列表”应用程序。

我有一些页面显示用户输入的所有待办事项列表项,以及一个用于编辑每个项的按钮。编辑按钮将用户发送到另一个页面,其中包含一个表单以输入对项目的更改。

用户可以更改有关项目的所有内容。显然 request.POST 给了我用户刚刚输入表单的所有信息,但我希望这些信息重写他们最初单击的项目的信息。那么如何编写视图代码来找出原始项目是什么?

我想我可以将表单提交按钮格式化为:

<button type="submit" name="save" value={{ item.pk }}>Save</button>

并以这种方式获取主键

但是可以说我已经将两个项目传递给了编辑页面,我想让用户能够将它们组合起来。同样,我可以通过以下方式弄清楚这些项目是什么:

<button type="submit" name="save" value='{{ item1.pk }} {{ item2.pk }}'>Save</button>

然后

request['save'].split(' ')

这似乎有点愚蠢。还有其他一些不那么蛮力的方法吗?

像一个:

request.tell_me_all_items_passed_to_the_template

之类的事情?

4

2 回答 2

1

如果其他人有同样的问题

所以不要这样做:

模板

<form method="post" action="/list/saving/">
    <!--- form fields --->
    <button type="submit" name="save" value='{{ item.pk }}'>Save</button>
</form>

网址.py

(r'^list/saving/$', save)

视图.py

def save(request):
    ....
    item = Item.objects.get(pk=request.POST['save'])
    ....

做这个:

模板

<form method="post" action="{% url todolist.views.save item.pk %}">
    <!--- form fields --->
    <button type="submit" name="save">Save</button>
</form>

网址.py

(r'^list/saving/(\d+)/$', save)

视图.py

def save(request, pk):
    ....
    item = Item.objects.get(pk=pk)
    ....

有关 url 反转的更多信息

于 2012-05-26T07:26:13.707 回答
0

如果你真的需要,只需使用隐藏输入。但是,无论如何这是不必要的。用户可能能够更改有关项目的“一切”,但他们不能更改pk(或者至少他们应该能够......不要给他们选项)。这pk是 Django 用来识别对象的,所以这已经为你处理好了。不确定这里的问题是什么。

于 2012-05-25T14:16:00.553 回答