2017-06-14 45 views
0

我已經擴展了管理模型,因此對於每個工作人員成員,只有他們在同一個組中時,我才能分配其他客戶。django - 管理模型將值分配給limit_choices_to從模型中的另一個字段

class UserProfile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE)  
    is_manager = models.BooleanField(default=False) 
    group_account = models.CharField(max_length=3,blank=True,null=True) 
    clients_assigned = models.ManyToManyField(User, limit_choices_to = Q(groups__groupaccount__group_account=group_account),blank=True,null=True,related_name='+') 

class UserProfileInline(admin.StackedInline): 
    model = UserProfile 
    verbose_name = "User extra" 
    verbose_name_plural = "extra" 
    filter_horizontal = ('clients_assigned',) 
def save_model(self, request, obj, form, change): 
    return super().save_model(request, obj, form, change) 

class UserAdmin(BaseUserAdmin): 
inlines = [UserProfileInline, ] 

def get_form(self, request, obj=None, **kwargs): 
    #permissions reduce for regular staff 
    if (not request.user.is_superuser): 
     self.exclude = ("app") 
     self.exclude = ("user_permissions") 
     ## Dynamically overriding 
     #self.fieldsets[2][1]["fields"] = ('is_active', 'is_staff','is_superuser','groups') 
     self.fieldsets[2][1]["fields"] = ('is_active', 'is_staff') 
    form = super(UserAdmin,self).get_form(request, obj, **kwargs) 
    return form 

和延長集團管理模式

class GroupAccount(models.Model): 
group_account = models.CharField(,max_length=3,blank=True,null=True) 
group = models.OneToOneField(Group,blank=True,null=True) 
def save(self, *args, **kwargs): 
    super(GroupAccount, self).save(*args, **kwargs) 

什麼即時試圖做的是簡單地由他和他們組指示燈(group_account場),以限制每個管理者用戶客戶端列表表示可用的客戶名單是那些與他自己具有相同特定組的人,例如'555'

當DB中的group_account ='555'時group__groupaccount__group_accoun的結果t = group_account爲空
但如果我將其更改爲硬編碼爲:groups__groupaccount__group_account ='555' 其返回相關結果。
是可能的和/或什麼替代?

的Django 1.9
感謝您的幫助

回答

0

你應該定製StackInline

class UserProfileInline(admin.StackedInline): 
    def formfield_for_foreignkey(self, db_field, request=None, **kwargs): 
     field = super(UserProfileInline, self).formfield_for_foreignkey(db_field, request, **kwargs) 
     if db_field.name == 'clients_assigned': 
      u = request.user 
      if not u.is_superuser: 
       field.queryset = field.queryset.filter(groups__in=u.groups.all()) 
     return field 
+0

它是完美的formfield_for_foreignkey方法,你是我的英雄!!!!!。我只需要將它改成formfield_for_manytomany。我很想知道我是否能夠理解這一點 – Rafi

相關問題