![](/img/trans.png)
[英]Django create a dict with values of a model field as key and model instance as value
[英]How to create a table with links to change boolean values of a model instance in Django?
我有一个ListView,可以在多个表中显示客户订单。 有一张表用于发送的订单(尚未标记为“已接收”),一张表用于“已接收”订单,一张用于“已处理”订单,另一张用于“已交付”订单。
此列表是人员列表,只有某些用户可以访问它。
我想做的是向每个订单行添加一个按钮(链接或表单的提交按钮)。
例如,在已发送订单(尚未“接收”)表中,应该有一个标有“标记为已接收”的按钮(瑞典语中为“ Kvittera”),在“已接收”表中,该按钮应显示为“标记”加工”(瑞典语中的“ Klar”)等等。
这是我想要的样子的图片(对不起瑞典语):
该模型具有三个布尔字段; order_received
, order_processed
和order_delivered
。 如果我在表中按下按钮“Kvittera”的布尔值order_received
应该从改变False
到True
,等等。 请注意,您永远不能将其更改回False
。
我可以设置一个获取URL的按钮/链接,即http://example.com/orders/1/receive
,该按钮/链接会运行一个完全执行此操作的视图,然后再次重定向到列表页面。 我对此有几个问题:
我认为,解决此问题的一种方法是创建一种表单来发布数据。 但是以这种形式应该没有字段,并且每个订单行都需要一种形式。 该表单实际上只是一个提交按钮。
同样,每种形式都应绑定到所讨论订单的实例,并且应以编程方式仅将一个值从False更改为True。 我该怎么做? 我是想得太多还是完全偏离了轨道?
我认为您的解决方案走上正确的轨道,可以通过表单发布数据,并发送数据,例如:{'state':'received'}。 另外,我猜想Django Formsets可能对您的设计有用: https ://docs.djangoproject.com/en/1.9/topics/forms/formsets/。 如果您不使用Django 1.9,请更改文档版本
另一个解决方案是使所有对象的id-s都具有dropdown / ChoiceField ,可以将order_received
更改为True。 您可以为order_processed
和order_delivered
创建两个下拉菜单。 然后,隐藏整个表单,并用一些JS修饰使按钮更新表单值并发送表单。
但是,老实说,它不会重复使用内置的Django函数,因此我仍然建议说出@phiberjenz提到的内容并制作一个formset 。 如果您不想使用JS,则可以将订单旁边的按钮用作提交按钮,然后发送将由服务器端表单处理的帖子。
我最终创建了一个RedirectView,该实例在实例上调用了一个方法来更改订单状态。 这是通过GET请求调用的,但是非常简单,根据https://docs.djangoproject.com/en/1.10/ref/class-based-views/base/ (在底部),示例完全显示了这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.