将表单与列表中的每个项目相关联

时间:2013-10-30 11:07:56

标签: django

我正在使用Django 1.5,我正在尝试创建一个列表并将一个表单(带有选择字段)与列表中的每个项目相关联,从哪里更改该对象的一些数据。

我遇到了以下问题:

问题1:如何获取适当对象的pk,以便在db中更新它?

问题2:当我发布帖子请求时,数据会以所有形式发生变化,每个表单都会有已更改的数据用于选择字段

如果这不是实现理想行为的正确方法,请将灯光点亮我的街道!

的Tx!

以下是一些示例代码。

查看:

class MyListView(ListView, FormMixin):
        model = MyModel()
        queryset = MyModel.objects.all()
        form_class = MyForm

        def get_context_data(self, **kwargs):
            context = super(MyListView, self).get_context_data(**kwargs)
            form_class = self.get_form_class()
            context['form'] = self.get_form(form_class)
            return context

        def post(self, request, *args, **kwargs):
            form_class = self.get_form_class()
            form = self.get_form(form_class)
            if form.is_valid():        
                update_obj = MyModel.objects.get(pk= PROBLEM1 )
                ...
                update_obj.save()
            else:
                print form.errors
            return self.get(request, *args, **kwargs)

形式:

class MyForm(forms.Form):
        CHOICES=(
                    ('one','one'),
                    ('two','two')
                )
        nr = forms.ChoiceField(widget = forms.Select, choices = CHOICES)

模板:

{% for item in object_list %}
            <tr>
                <td>{{ item.title }}</td>
                <td>{{ item.nr}}
                    <form action="" method="post">{% csrf_token %}
                    {{ form.as_p }} <input type="submit" value="Submit" />
                    </form>
                </td>
            </tr>
{% endfor %}

1 个答案:

答案 0 :(得分:1)

您应该使用formsets