2016-11-15 8 views
0

- 次のグループと異なるfacilities用アプリIセットアップ権限:管理者は、ユーザーがいくつかのより多く持っているし、すべての権限を持っているジャンゴ - リレーショナル制約(ユーザーのグループに対する制約)私のジャンゴで

ADMIN_<facility> 
USER_<facility> 

グループADMIN_facility1を持つユーザーは、グループUSER_facility1に決して追加されないようにしたいと思います。私のアプローチ:

class MyUser(models.Model): 
... 
    @property 
    def admin_facilities(self): 
     [g.name for g in self.groups.filter(name__startswith="ADMIN_")] 

    @property 
    def user_facilities(self): 
     [g.name for g in self.groups.filter(name__startswith="USER_")] 

    def save(self, **kwargs): 
     for user_fac in self.user_facilities: 
      if user_fac in self.admin_facilities: 
       # remove the user facility 
       self.groups.remove(
        self.groups.get(name="USER_{}".format(user_fac) 
       ) 
     super(MyUser, self).save(**kwargs) 
... 

このアプローチは、保存機能の呼び出し中にグループがまだ存在しないため、機能しません。

質問:は、どのように私はADMIN_<facility>グループにあるユーザーは応じUSER_<facility>グループに追加することはできませんという制約のですか?保存されたばかりの

def save(self, **kwargs): 
    super(MyUser, self).save(**kwargs) 
    for user_fac in self.user_facilities: 
     if user_fac in self.admin_facilities: 
      # remove the user facility 
      self.groups.remove(
       self.groups.get(name="USER_{}".format(user_fac) 
      ) 

答えて

0

あなたはこのように、先頭に呼び出して保存を送信することができます。

M2Mデータを入力する前に、ユーザーインスタンスを保存する必要があります(データベースについて考えてみてください)。 あなたが必要と思うのはm2m_changedシグナルです。

そして、同様のコードをpost_addに書きます。

0

M2M fieldが持っている全く異なる順序: