__init__() получила несколько значений для аргумента 'user'
У меня есть форма, модель и представление, и я пытаюсь показать ModelChoiceField с фильтрами
Я написал init в моем forms.py, но когда я пытаюсь отправить свою форму на html-странице, я получаю ошибку:
"__init__()
получено несколько значений для аргумента 'user'" "
forms.py
class WorkLogForm(forms.ModelForm):
worklog_date = forms.DateField(label='Дата', widget=forms.DateInput(
attrs={'class': 'form-control', 'placeholder': 'Введите дату'}))
author = forms.EmailField(label='Автор',
widget=forms.EmailInput(attrs={'class': 'form-control', 'placeholder': 'Email автора'}))
contractor_counter = forms.ModelChoiceField(queryset=CounterParty.objects.none())
contractor_object = forms.ModelChoiceField(queryset=ObjectList.objects.none())
contractor_section = forms.ModelChoiceField(queryset=SectionList.objects.none())
description = forms.CharField(label='Описание',
widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Описание'}))
def __init__(self, user, *args, **kwargs):
super(WorkLogForm, self).__init__(*args, **kwargs)
counter_queryset = CounterParty.objects.filter(counter_user=user)
object_queryset = ObjectList.objects.filter(
Q(customer_guid__in=counter_queryset) | Q(contractor_guid__in=counter_queryset))
section_queryset = SectionList.objects.filter(object__in=object_queryset)
self.fields['contractor_counter'].queryset = counter_queryset
self.fields['contractor_object'].queryset = object_queryset
self.fields['contractor_section'].queryset = section_queryset
class Meta:
model = WorkLog
fields = (
'worklog_date', 'author', 'contractor_counter', 'contractor_object', 'contractor_section', 'description')
views.py
def create_work_log(request):
if request.method == 'POST':
form = WorkLogForm(request.POST, user=request.user)
if form.is_valid():
form.author = request.user
work_log = form.save()
return render(request, 'common/home.html')
else:
form = WorkLogForm(user=request.user)
return render(request, 'contractor/create_work_log.html', {'form': form})
В методе вашей формы init
вы определили параметры как:
def __init__(self, user, *args, **kwargs):
Поэтому ваш первый параметр должен быть user
вместо request.POST
. Поэтому вы можете изменить
form = WorkLogForm(request.POST, user=request.user)
To
form = WorkLogForm(request.user, request.POST)