在Django中创建订单

时间:2009-05-30 19:13:21

标签: django django-admin django-forms

大家好,我对django admin有几个问题。

首先是相关细节。我目前有Client,Printer,Cartridge和Order模型。

打印机型号具有与墨盒型号相同的ManyToManyField,可让您选择可与该打印机一起使用的所有墨盒。

Cliente为他们拥有的打印机提供了ManyToManyField。

1)我想通过Django管理员创建一个Order,它允许您通过ManyToManyField指定Client,dicount和多个cartridge。这有点棘手,因为我必须通过另一个表格来指明它是新墨盒还是笔芯。

2)我希望管理员过滤墨盒只显示属于他们拥有的打印机的墨盒。

3)此外,我想拥有一个包含订单总价的字段,但是应该根据订单中添加的墨盒数来计算。我不知道是否应该通过在订单中添加更多相同的墨盒或在相关表格中指定数量的另一个字段来完成。

这可以在管理员中完成,还是需要使用表单?如果是这样,我将如何将其添加到管理员?这似乎很困难,可能我需要在多个部分做,因为为了过滤我必须事先知道客户端的墨盒列表。

2 个答案:

答案 0 :(得分:2)

据我所知,不,这不可能。开发版本有一些methods for limiting foreign keys,但在我看来,基于客户的限制是不可能的,因为它取决于单独的外键。

如果您真的想在管理表单中这样做,最好的建议是使用Javascript来完成它。您仍然需要进行AJAX调用以获取打印机客户所拥有的列表以及基于此显示的盒式磁带,但可以完成。您只需指定要使用the Media class加载的JS文件。

但我认为这比它的价值还要多。我认为最简单的方法是使用Form Wizards。这样,您就可以选择客户,这样下一步就知道要显示哪些墨盒。

希望有所帮助!

答案 1 :(得分:1)

我也遇到了类似的问题,并且得出的结论是,在很多情况下,使用表单编写自己的管理界面比尝试将管理员功能强加到管理员中更好。在那里。

至于3),它取决于你的产品基础是什么样的。如果您可能让客户订购50个相同的小部件,您可能需要数量字段。如果客户更有可能订购2个小部件,一个是红色,一个是蓝色,则将每个项目分别添加到manytomany字段并将它们分组到您的订单界面。