Выпадающий фильтр в формах django

В форме я пытаюсь отфильтровать выпадающее поле marketplace, принадлежащее вошедшему пользователю, на основе его группы. Он перечисляет все элементы выпадающего поля. Я пробовал ниже, но мне кажется, что что-то не так с частью фильтра.

 class InfringementForm(ModelForm):

 def __init__(self, user, *args, **kwargs):
 super(InfringementForm,self).__init__(*args, **kwargs)
 self.fields['marketplace'].queryset = 
 Marketplace.objects.filter(groups__user=self.user)

  class Meta:
    model = Infringement
class Meta:
    ordering = ['-updated', '-created']
def __str__(self):
    return self.name

     
    fields = ['name', 'link', 'infringer', 'player', 'remove', 'status', 
       'screenshot','marketplace']

models.py

class Marketplace (models.Model):
name = models.CharField(max_length=100)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
groups = models.ForeignKey(Group, on_delete=models.CASCADE,default=1)

Попробуйте это внутри метода __init__():

def __init__(self, user, *args, **kwargs): 
    self.user = user     
    super(InfringementForm,self).__init__(*args, **kwargs)
    self.fields['marketplace'].queryset = Marketplace.objects.filter(groups__user=self.user)

Окончательный ответ - добавление self.user = user в формах и добавление пользователя в представлении.

forms.py

  class InfringementForm(ModelForm):
  def __init__(self, user, *args, **kwargs):
  self.user = user  
  super(InfringementForm,self).__init__(*args, **kwargs)
  self.fields['marketplace'].queryset = 
  Marketplace.objects.filter(groups__user=self.user)
  class Meta:
  model = Infringement
    
  fields = ['name', 'link', 'infringer', 'player', 'remove', 'status', 
  'screenshot', 'marketplace']

views.py

 @login_required(login_url='login')
  def createInfringement(request):
  user=request.user
  form = InfringementForm(user=request.user)
  if request.method == 'POST':
  
  form = InfringementForm(user, request.POST, request.FILES)
  if form.is_valid():
     
     form.save()
  return redirect('home')    context ={'form': form}    return render (request, 'base/infringement_form.html', context)

Попробуйте это решение...

В основном groups является внешним ключом в Marketplace модели, он возвращает полный объект Group модели.

вы пытались фильтровать с помощью полного объекта, это невозможно в запросе, поэтому вы можете фильтровать с помощью id экземпляра пользователя

Код становится таким

class InfringementForm(ModelForm):

 def __init__(self, user, *args, **kwargs):
 super(InfringementForm,self).__init__(*args, **kwargs)
 self.fields['marketplace'].queryset = 
 Marketplace.objects.filter(groups__user__id=self.user.id)

  class Meta:
    model = Infringement
Вернуться на верх