Ich habe das Admin-Modell erweitert, so dass ich für jeden Mitarbeiter andere Kunden nur zuweisen kann, wenn sie in der gleichen Gruppe sind.django - Admin-Modell zuweisen Wert zu limit_choices_to von einem anderen Feld im Modell
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
und erweiterte die Gruppe Admin-Modell
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)
was im einfach versuchen zu tun ist, um die Client-Liste für jeden Manager-Benutzer durch seine und ihre Gruppenindikator (group_account Feld) zu begrenzen bedeutet, dass die Liste der verfügbaren Kunden diejenigen ist, die die gleiche spezifische Gruppe wie er selbst haben, z. B. "555"
wenn der group_account = '555' im DB das Ergebnis von groups__groupaccount__group_accoun ist t = group_account sind leer
aber wenn ich es ändere Hardcoded zu: groups__groupaccount__group_account = '555' seine Rückkehr das relevante Ergebnis.
ist das möglich und/oder was ist die Alternative?
django 1,9
Dank für die Hilfe
es perfekt ist, du bist mein Held !!!!!. Ich musste es nur in formfield_for_manytomany ändern. Ich möchte unbedingt wissen, dass du das verstehen kannst – Rafi