Django переопределение метода формы __init__ с помощью ModelForm
У меня есть внешний ключ (zone_set
) в качестве поля выбора в форме. Он должен отображать только zone_set
текущего проекта. Как вы видите, это не так, поскольку отображается zone_set:
I belong to an other project, I should not be displayed 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
объекта.