Django how to get the users who are not in many2many field?

'models.py'

class StaffProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="user_profile")
    staff_user = models.ManyToManyField(User, null=True, blank=True, related_name="staff_user")
    mobile_number = models.CharField(max_length=14, validators=[RegexValidator(r'^\d{1,10}$')])
    fcm_token = models.CharField(max_length=256, null=True, blank=True)
    manager = models.BooleanField(default=False)

   def __str__(self):
       return self.user.username

'forms.py'

class ManagerSignUpForm(UserCreationForm):
    first_name = forms.CharField(max_length=30, label='Name')
    email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')
    mobile_number = forms.CharField(max_length=14, min_length=10, )
    staff_user = forms.ModelMultipleChoiceField(queryset=User.objects.filter(is_staff=False),required=True)

    def __init__(self, *args, **kwargs):
        all_user_list = User.objects.filter(is_superuser=False,is_staff=True)
        all_staff_profile = StaffProfile.objects.get(staff_user__in=all_user_list)

        super(ManagerSignUpForm, self).__init__(*args, **kwargs)
        # self.fields['staff_user'] = forms.ModelChoiceField(queryset=after_exclude)

I want to show(Append) the Users who are not already exists in staff_user(M2M) field in entire StaffProfile model.

Note: I am Extending User Model

Upvotes: 0

Views: 48

Answers (2)

JPG
JPG

Reputation: 88569

Use isnull=True filter

User.objects.filter(staff_user__isnull=True)

Upvotes: 2

p14z
p14z

Reputation: 1810

You can filter the users by the related_name of the M2M relationship like this:

users = User.objects.filter(staff_user=None)

Upvotes: 1

Related Questions