请教熟悉 Python Django 的老师们,关于 model field 的在 form 上自动显示的问题.

2018-08-15 17:51:07 +08:00
 seven777
我是初学者,请老师们见谅,接触这一块也是工作需要.
多谢各位!
我设计了三个 model :
class Unit(models.Model):  
  FName = ...
 ...
class Goods(models.Model):
  FUnitID = models.ForeignKey(Unit,...)
 ...
class SaleOrderEntry(models.Model):
  FGoodsID = models.ForeignKey(Goods,...)
  FUnitID = ???
 ...
我的想法:
在 SaleOrderEntry 这个表中,我需要一个 FUnitID 字段来存储 Goods (货物) 的计量单位(以 Unit 表主键形式存储),

我希望实现:
在 admin site 的 form 中,增加一个 SaleOrderEntry 实例时,"计量单位"是随着 Goods 字段的选择而自动出现,随之而改变的.
而且自动显示的 Unit 是 name ,而不是 Autofield : id .

我能想到的(我太菜了):
我觉得 FUnitID 也应该定义成: FUnitID = models.ForeignKey(Unit,...)
但怎么才能在 form 上实现"随着 Goods 字段的选择而自动出现"呢?
请老师们帮忙.谢谢了.
2125 次点击
所在节点    Python
16 条回复
mayorbryant
2018-08-15 18:13:07 +08:00
obj = SaleOrderEntry.objects.get(pk=pk)

"计量单位" = obj. FGoodsID. FUnitID.FName
ArianX
2018-08-15 19:22:18 +08:00
可以在 admin site 上增加一个自定义的字段,通过一楼那样的方式访问
qq976739120
2018-08-16 00:01:53 +08:00
我经历的两家公司都不用 form....
twor
2018-08-16 00:10:44 +08:00
如果是我,我这样处理:

class Goods(models.Model):
....def __str__(self):
........return self.name+self.FUnitID.FName

(个人以为 admin 不用过于追去个性化,性价比太低;如果必须个性化,就自己写一个页面)
twor
2018-08-16 00:17:05 +08:00
静态显示,但没按 save 按钮,不会动态变化

class SaleOrderEntry(models.Model):
....def get_FName(self):
........return self.FGoodsID.FUnitID.FName
....get_FName.short_description = '计量单位'
twor
2018-08-16 00:27:29 +08:00
4L 的设置,目的是新增 SaleOrderEntry 时有计量单位的提醒
5L 的设置,目的是修改或查看时,显示计量单位提醒
georgema1982
2018-08-16 07:00:15 +08:00
首先你要先解释什么叫“随着 Goods 字段的选择而自动出现”。
seven777
2018-08-16 08:48:46 +08:00
@qq976739120
老师,我的水平还处于没有分辨能力的阶段,:)
不用 form?用 table?
seven777
2018-08-16 08:51:34 +08:00
@georgema1982
老师好,我水平低啊,表达不清晰.

选择 货物 自动带出 计量单位 ,数据表里村的是 Unit 的 id , 页面上显示的是 Unit 的 FName .
seven777
2018-08-16 09:04:21 +08:00
@twor
谢谢老师.
因为我刚开始学习 Django, 目的是想快速实现一个初级版本.
我是想学习了解 admin 的实现方式,然后再自己做页面.
刚开始,知识面捉襟见肘.
我自己有几年传统 ERP 的实施和开发经历,也仅仅对这些技术有了解,仅仅对数据库的 CRUD ,触发器,约束,等等需要用到的知识有了解.
本科是学财务的,看懂 python 和 django 的英文文档没问题,但也仅仅在看懂和理解,融会贯通还很远.
也在网罗一些伙伴,但无奈,专业的瞧不起我现在的项目需求;不专业的又帮不上我.
seven777
2018-08-16 09:16:37 +08:00
@twor
您给我的回复我马马虎虎看得懂,谢谢.
您觉得像 SaleOrderEntry 这种单据表,还需要存 UnitID 这种字段吗? 每个 goods 对应的 unit 已经在 goods 表里有了.
freakxx
2018-08-16 09:59:21 +08:00
这个的话,应该是要用 js 去做一个联动查询

https://www.google.com/search?q=django%20admin%20js%20%E8%81%94%E5%8A%A8&safe=off&cad=h
freakxx
2018-08-16 10:03:58 +08:00
随便打开一个链接,看下怎么处理 js 这一块

到时 change 的时候,fiilter(goods=goods).first()就算了,试下
seven777
2018-08-16 10:10:34 +08:00
@freakxx 谢谢老师!!!
twor
2018-08-16 16:31:11 +08:00
@seven777 如果你技术扎实,就按照 @freakxx 的搜索页面找找方案,我看了一下,的确能实现你说的效果
如果那些文章有点吃力,就不要勉强了,先把整体做好,最后再雕琢这种提升体验的细节
至于单位要不要单独弄个表,这个涉及到架构了,我也没什么好的建议,如果是我,可能会选 choices
https://docs.djangoproject.com/en/2.1/ref/models/fields/
seven777
2018-08-16 17:12:15 +08:00
@twor 非常感谢!!!
我接受而且非常赞同您的建议,"先把整体做好,最后再雕琢这种提升体验的细节".
先把能做的做了再说,也许知识点在哪天就被覆盖了.
thx v m

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/480118

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX