Django Model Formset из ManyToMany не принимает набор запросов

У меня есть модель под названием Game, которая имеет поле ManyToMany

consoles = models.ManyToManyField('Console', through='GameConsole')

Что ManyToMany имеет некоторые дополнительные атрибуты

class GameConsole(models.Model):
    game            = models.ForeignKey(Game, on_delete=models.CASCADE)
    console         = models.ForeignKey(Console, on_delete=models.CASCADE)
    released        = models.DateTimeField    
    exclusive       = models.BooleanField(default=False)

У меня есть страница, на которой я хочу создавать/редактировать эти отношения.

#forms.py
class GameConsoleForm(ModelForm):
    class Meta:
        model = GameConsole
        fields = ['console', 'released', 'exclusive']


#to prevent the submission of consoles with the same id (taken from django topics forms formsets)
class BaseGameConsoleFormSet(BaseFormSet):
    def clean(self):
        """Checks that no two alias have the same name."""
        if any(self.errors):
            # Don't bother validating the formset unless each form is valid on its own
            return
        console_ids = []
        for form in self.forms:
            if self.can_delete and self._should_delete_form(form):
                continue
            console= form.cleaned_data.get('console')
            if console in console_ids:
                raise ValidationError("Consoles in a set must be different.")
            console_ids.append(console)

NewGameConsoleFormSet = modelformset_factory(GameConsole, form=GameConsoleForm, formset=BaseGameConsoleFormSet, extra=1, can_delete=True)
GameConsoleFormSet = modelformset_factory(GameConsole, form=GameConsoleForm, formset=BaseGameConsoleFormSet, extra=0, can_delete=True)

Создание нескольких GameConsole работает нормально. Проблема заключается в редактировании. Когда я делаю следующее: formset = GameConsoleFormSet(queryset = game_consoles) я получаю следующую ошибку __init__() got an unexpected keyword argument 'queryset', что странно, так как я уже использовал эту логику с другой моделью (обычная таблица, не ManyToMany) и она работала. Мой вопрос заключается в следующем: я делаю что-то неправильно, или набор форм модели ManyToMany не поддерживает кверисет для редактирования?

Вам нужно наследовать BaseModelFormSet класс вместо BaseFormSet так:

class BaseGameConsoleFormSet(BaseModelFormSet):
    ...
Вернуться на верх