我有几个看起来像这样的模型:
class System(models.Model):
'''Defines a system'''
system_desc = models.CharField('System Name', max_length=50)
class SystemGroup(models.Model):
'''Groups within a 'System' (ie. Customers, regions, divisions, etc. '''
group_desc = models.CharField('Group Name',max_length=25)
system = models.ForeignKey(System)
class QueryData(models.Model):
'''Queries related to a 'System' (ie. Active users against System1, Orders today in system2, etc. '''
qry_desc = models.CharField('Query Description', max_length=50)
system = models.ForeignKey(System)
class UserDashboard(models.Model):
'''User specific Dashboard '''
user = models.ForeignKey(User)
board_name = models.CharField('Dashboard Name', max_length=50)
class UserDashboardGroup(models.Model):
'''Groups on the dashboard (ie. 'System 1's Key Indicators', 'System 2's Hot Sheet', etc. '''
group_desc = models.CharField('Group Display Title', max_length=50)
user = models.ForeignKey(User)
dashboard = models.ForeignKey(UserDashboard)
system = models.ForeignKey(System)
system_group = models.ForeignKey(SystemGroup)
class UserGroupQuery(models.Model):
'''Queries that run in a specific group on the dashboard (ie. Within 'System 1's Key Indicators, we run queries for active users today, orders in the last hour, etc. '''
user = models.ForeignKey(User)
dashboard = ChainedForeignKey(UserDashboard, chained_field='user', chained_model_field='user', show_all=False, auto_choose=True)
user_dashboard_group = ChainedForeignKey(UserDashboardGroup, chained_field='dashboard', chained_model_field='dashboard')
query = models.ForeignKey(QueryData)
我在最后一部分遇到了问题。我想限制查询'显示在基于所选user_dashboard_group
的管理页面中。根据我目前的型号,我不确定如何做到这一点。 query
和user_dashboard_group
都有System
的外键,但彼此没有。要做到这一点,我必须得到user_dashboard_group
' system
,然后使用它来过滤QueryData
。我怎么能这样做?
修改 我在图片中加入(希望)描述我想做的更好一点。 在步骤1中,用户输入该组查询的名称。该组与系统(#2)和系统内的预定义组(#3)相关联(将#3视为'客户'或'区域'等等尽管命名相似,但#1和#3并不是一回事。然后,他们选择“保存并继续编辑”'在此内联表单中,步骤4中的下拉列表将填充上述表单中的信息。一旦步骤#4进行了选择,我希望#5仅使用来自关联系统的数据填充。由于#2包含这些信息,我希望这样做很容易,但我无法弄清楚链接。
我也意识到我没有提到我正在使用django-smart-selects
答案 0 :(得分:2)
我从未使用过django-smart-choices,但遵循文档,我希望
query = models.ChainedForeignKey(QueryData,**kwargs)
而不是
query = models.ForeignKey(QueryData)
因为您希望查询中的选项取决于其他选择。这种理解是否正确?如果是这样,那只是关于定义正确的** kwargs。
对于** kwargs,我会建议像这样的
<强>更新强>
chained_field='query', chained_model_field='user_dashboard_group__system__query_set__query'
假设在两种情况下字段名称都是'system。 我很确定这正确地描述了这种关系。我只是不确定,如果django-smart-choices支持这种语法。
答案 1 :(得分:0)
除了两个关系之外,你会在一个关系中做到这一点。
field__relation1__relation2