Объект 'ProjectFormFormSet' не имеет атрибута 'request' - PullRequest
0 голосов
/ 08 июля 2019

Я хочу добавить в свой проект одну функцию, которая будет доступна только авторизованным пользователям.Но когда я пишу набор запросов, он выдает ошибку типа ModelNameFormSet object has no request attribute

views.py

class BaseAuthorFormSet(BaseModelFormSet):
  def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.queryset = Project.objects.filter(author_id=self.request.user.pk)


def add_object(request):
  ProjectFormSet = modelformset_factory(Project, formset=BaseAuthorFormSet, fields=( 'service_name', 'service_code', 'report_month', 'report_year', 'last_year'), extra=1)
  if request.method == "POST":
    form = ProjectFormSet(request.POST)
    form.author = request.user
    if form.is_valid():
        form.save()
form = ProjectFormSet()
return render(request, 'app1/home.html',{'form':form})

У меня есть только этот код.Как я могу решить эту проблему?Заранее спасибо!

1 Ответ

0 голосов
/ 08 июля 2019

Если вам нужен запрос в наборе форм, вам нужно передать его туда. Также обратите внимание, что добавление автора к набору форм ничего не изменит, его нужно добавлять в результат каждого сохранения формы.

class BaseAuthorFormSet(BaseModelFormSet):
  def __init__(self, *args, **kwargs):
    self.request = kwargs.pop('request')
    super().__init__(*args, **kwargs)
    self.queryset = Project.objects.filter(author_id=self.request.user.pk)


def add_object(request):
  ProjectFormSet = modelformset_factory(Project, formset=BaseAuthorFormSet, fields=( 'service_name', 'service_code', 'report_month', 'report_year', 'last_year'), extra=1)
  if request.method == "POST":
    formset = ProjectFormSet(request.POST, request=request)
    if formset.is_valid():
        for form in formset:
          obj=form.save(commit=False)
          obj.author = request.user
          obj.save()
          return redirect('somewhere')
  form = ProjectFormSet(request=request)
  return render(request, 'app1/home.html',{'form':form})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...