Django переопределение метода формы __init__ с помощью ModelForm

У меня есть внешний ключ (zone_set) в качестве поля выбора в форме. Он должен отображать только zone_set текущего проекта. Как вы видите, это не так, поскольку отображается zone_set: I belong to an other project, I should not be displayed here, который не принадлежит текущему проекту.

enter image description here

Помогите пожалуйста!

Вот моя форма, но она не работает

class ODMatrixForm(forms.ModelForm):
    class Meta:
        model = ODMatrix
        # fields = '__all__'
        exclude = ('size', 'locked',)

        def __init__(self, current_project=None, *args, **kwargs):
            super().__init__(*args, **kwargs)
            if current_project:
                queryset = ZoneSet.objects.filter(project=current_project)
                self.fields['zone_set'].queryset = queryset

Вы создали __init__ как конструктор класса Meta, это должен быть конструктор класса ODMatrixForm, поэтому:

class ODMatrixForm(forms.ModelForm):
    
    #       🖟 part of ODMatrixForm, not Meta
    def __init__(self, current_project=None, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if current_project:
            self.fields['zone_set'].queryset = ZoneSet.objects.filter(
                project=current_project
            )
    
    class Meta:
        model = ODMatrix
        # fields = '__all__'
        exclude = ('size', 'locked',)

В представлении вам нужно будет передать current_project при построении ODMatrixForm объекта.

Вернуться на верх