Django: ошибка с form_valid и get_full_path () - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь получить доменное имя текущего арендатора через форму. У меня проблемы с написанием мнения, которое бы достигло этого.

вот мой form.py:

class ETL(forms.Form):
    Historical = forms.FileField()
    Pre_processing = forms.FileField()
    Supplier = forms.FileField()
    parameters = forms.FileField()


    def process_data(self, *args, **kwargs):

        url = self.request.get_full_path()

        dbschema = remove_www(url.split(':')[0]).lower()
        engine = create_engine('postgresql://pierre:56-Pmtmpmtm@127.0.0.1:5432/dbexostock12',
                               connect_args={'options': '-csearch_path={}'.format(dbschema)})

        fh = io.TextIOWrapper(self.cleaned_data['Historical'].file)
        fpp = io.TextIOWrapper(self.cleaned_data['Pre_processing'].file)
        fs = io.TextIOWrapper(self.cleaned_data['Supplier'].file)
        fp = io.TextIOWrapper(self.cleaned_data['parameters'].file)

        ....

view.py

@method_decorator(login_required, name='dispatch')
class Getfiles(LoginRequiredMixin,FormView):
    template_name = 'upload.html'
    form_class = ETL
    success_url = 'Home'

    def form_valid(request, form):
        url = request.get_full_path()
        form.process_data()

        return super().form_valid(form)

и вот ошибка, которую я получаю:

AttributeError at /upload.html
'Getfiles' object has no attribute 'get_full_path'

Я новичок с django, я не уверен, как решить эту проблему, и документация по этому поводу меня немного смутила, особенно насчет метода form_valid (). Спасибо!

1 Ответ

1 голос
/ 20 апреля 2020

form_valid не имеет request в качестве первого параметра. Параметры self и form. Вы можете получить доступ к объекту запроса с помощью self.request:

class Getfiles<b>View</b>(LoginRequiredMixin, FormView):
    template_name = 'upload.html'
    form_class = ETL
    success_url = 'Home'

    def form_valid(<b>self</b>, form):
        url = <b>self.request.</b>get_full_path()
        form.process_data()

        return super().form_valid(form)

Обратите внимание, что ваша форма также не имеет request. Вы можете передавать данные, например, через параметры метода:

class Getfiles<b>View</b>(LoginRequiredMixin, FormView):
    template_name = 'upload.html'
    form_class = ETL
    success_url = 'Home'

    def form_valid(<b>self</b>, form):
        url = <b>self.request.</b>get_full_path()
        form.process_data(<b>url</b>)

        return super().form_valid(form)

и в форме:

class ETL(forms.Form):
    Historical = forms.FileField()
    Pre_processing = forms.FileField()
    Supplier = forms.FileField()
    parameters = forms.FileField()

    def process_data(self, <b>url</b>):
        dbschema = remove_www(url.split(':')[0]).lower()
        engine = create_engine('postgresql://pierre:56-Pmtmpmtm@127.0.0.1:5432/dbexostock12',
                               connect_args={'options': '-csearch_path={}'.format(dbschema)})

        fh = io.TextIOWrapper(self.cleaned_data['Historical'].file)
        fpp = io.TextIOWrapper(self.cleaned_data['Pre_processing'].file)
        fs = io.TextIOWrapper(self.cleaned_data['Supplier'].file)
        fp = io.TextIOWrapper(self.cleaned_data['parameters'].file)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...