保存项目的顺序

时间:2014-03-06 04:46:20

标签: python html django

我的模特:

class Category(models.Model):
    name = models.CharField(max_length=50, unique=True)
    order = models.SmallIntegerField()

我的模板:

{% for c in categories %}
    {{ c }} -- <input type="text" name="order[{{ c.id }}]" value="{{ c.order }}">
    Submit Button
{% endfor %}

我的观点:

def category_order(request):
    print request.POST
    print request.POST.getlist('order[]')

输出:

<QueryDict: {u'order[3]': [u'1'], u'order[1]': [u'1'], u'order[5]': [u'2'], u'order[4]': [u'33'], u'order[2]': [u'2'], u'order[6]': [u'3'], u'csrfmiddlewaretoken': [u'4XjehEwMdNK032342JkYJvBJabunKB'], u'order-btn': [u'order']}>
[]

所以我的问题是如何循环每个订单[N]并获取类别ID及其新订单值以将其保存到数据库?

2 个答案:

答案 0 :(得分:1)

使用dict理解:

orders = {name.split('[')[1].split(']')[0]: request.POST[name]
          for name in request.POST if name.startswith('order[')}
# `orders` is not a dictionary maps `id`s to `order`s.
# Do something with `orders`.

或使用简单的for循环:

for name in request.POST:
    if not name.startswith('order['): continue
    id_ = name.split('[')[1].split(']')[0]
    order = request.POST[name]
    # Do something with `id_`, `order`

答案 1 :(得分:1)

如果您正在查看订购的对象,可以使用一个库django-ordered-model来处理它。这包括一个好的,拖放管理视图。例如:

from django.db import models
from ordered_model.models import OrderedModel

class Category(OrderedModel):
    name = models.CharField(max_length=50, unique=True)

    class Meta(OrderedModel.Meta):
        pass