我需要自定义添加到模型页面的管理面板与其他模型相关的输入。但我无法弄清楚如何保存它们。
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']
答案 0 :(得分:1)
保存应在save_model中完成。如果您使用过django表单,card_list
参数中的form
数据也应该。虽然您仍然可以通过正确指出的request
访问它。
您还必须自己清理数据,django表格会为您自动清理数据。
答案 1 :(得分:0)
你得到的正是你所生产的:),没有什么意外的!
如果您希望处理在change_list中手动添加的某些字段,则必须覆盖clean
(例如,查看here)。
如果你这样做,检索ID取决于你,但是一个简单的split('-')[-1]
就可以了。
这可以满足您的特定需求。
另一方面,我认为你的做法并不正确。 django管理员足以应对ForeignKeys ManyToMany,所以我认为没有必要自己做事。
虽然你可以使用上面的提示,但我建议你从头开始 - 如果你愿意的话,一个新的SO问题,你发布初始模型以及你想要实现的目标。