2

次のようなモデルがいくつかあります。

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ます。これどうやってするの?systemQueryData

編集 私がやりたいことをもう少しうまく説明するために(うまくいけば)写真を追加しています。ステップ 1 で、ユーザーはこのクエリ グループの名前を入力します。このグループは、システム (#2) とシステム内の定義済みグループ (#3) に関連付けられています (#3 を「顧客」または「地域」などと考えてください。#1 と #3 は同じものではありません)。 、似たような名前にもかかわらず)。次に、このインライン フォームで [保存して編集を続行] を選択すると、手順 4 のドロップダウンに上記のフォームの情報が入力されます。ステップ 4 で選択を行ったら、関連するシステムからのデータのみを 5 に入力します。#2にはこの情報が含まれているため、これを行うのはかなり簡単だと思いますが、チェーンがわかりません.

デモ ダッシュボード

また、 django-smart-selectsを使用していることに言及していないことにも気付きました

4

2 に答える 2

3

私はdjango-smart-selectsを使ったことはありませんが、ドキュメントに従って、私は期待します

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-selects がその構文をサポートしているかどうかはわかりません。

于 2012-08-14T08:49:29.000 に答える
1

2 つを除いて、1 つのリレーションに対して行うのと同じ方法です。

field__relation1__relation2
于 2012-08-12T04:33:33.403 に答える