繁体   English   中英

如何在Django中创建带有链接以更改模型实例的布尔值的表?

[英]How to create a table with links to change boolean values of a model instance in Django?

我有一个ListView,可以在多个表中显示客户订单。 有一张表用于发送的订单(尚未标记为“已接收”),一张表用于“已接收”订单,一张用于“已处理”订单,另一张用于“已交付”订单。

此列表是人员列表,只有某些用户可以访问它。

我想做的是向每个订单行添加一个按钮(链接或表单的提交按钮)。

例如,在已发送订单(尚未“接收”)表中,应该有一个标有“标记为已接收”的按钮(瑞典语中为“ Kvittera”),在“已接收”表中,该按钮应显示为“标记”加工”(瑞典语中的“ Klar”)等等。

这是我想要的样子的图片(对不起瑞典语):

图片外观

该模型具有三个布尔字段; order_receivedorder_processedorder_delivered 如果我在表中按下按钮“Kvittera”的布尔值order_received应该从改变FalseTrue ,等等。 请注意,您永远不能将其更改回False

我可以设置一个获取URL的按钮/链接,即http://example.com/orders/1/receive ,该按钮/链接会运行一个完全执行此操作的视图,然后再次重定向到列表页面。 我对此有几个问题:

  1. 您不应使用GET更改任何内容(使用POST,PUT或PATCH)
  2. 您不应该在网址中使用动词(在这种情况下会收到)

我认为,解决此问题的一种方法是创建一种表单来发布数据。 但是以这种形式应该没有字段,并且每个订单行都需要一种形式。 该表单实际上只是一个提交按钮。

同样,每种形式都应绑定到所讨论订单的实例,并且应以编程方式仅将一个值从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_processedorder_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM