Django Admin - 从自定义表单保存数据

时间:2012-02-11 05:23:57

标签: django django-admin

我需要自定义添加到模型页面的管理面板与其他模型相关的输入。但我无法弄清楚如何保存它们。

admin.py

class OrderAdmin(admin.ModelAdmin):
    change_form_template = 'admin/testapp/order/change_form.html'

    def change_view(self, request, object_id, extra_context=None):
        order = Order.objects.get(id=object_id)
        card_list = Card.objects.all().filter(type=order.type)
        result = super(OrderAdmin, self).change_view(request, object_id, extra_context={
        'card_list': card_list,
        })
        return result

change_form.html

    {% for card in card_list %}
    <input type="text" name="card-{{ card.id}}" value="{{ card.qty }}"></td>
    {% endfor %}

如何在卡片模型中保存更改后的值?

我试着像这里描述的那样做: https://docs.djangoproject.com/en/1.3/ref/contrib/admin/#adding-custom-validation-to-the-admin

但是self.cleaned_data不包含来自输​​入的数据。

感谢。

UPD:嗯,我抓住了数据,但我认为这是非常混乱的方式。 我几乎无法想象如何根据输入计算id。

def save_model(self, request, obj, form, change):
        request.POST['card-288']

2 个答案:

答案 0 :(得分:1)

保存应在save_model中完成。如果您使用过django表单,card_list参数中的form数据也应该。虽然您仍然可以通过正确指出的request访问它。

您还必须自己清理数据,django表格会为您自动清理数据。

答案 1 :(得分:0)

你得到的正是你所生产的:),没有什么意外的!

如果您希望处理在change_list中手动添加的某些字段,则必须覆盖clean(例如,查看here)。

如果你这样做,检索ID取决于你,但是一个简单的split('-')[-1]就可以了。

这可以满足您的特定需求。

另一方面,我认为你的做法并不正确。 django管理员足以应对ForeignKeys ManyToMany,所以我认为没有必要自己做事。

虽然你可以使用上面的提示,但我建议你从头开始 - 如果你愿意的话,一个新的SO问题,你发布初始模型以及你想要实现的目标。