Мое приложение из загруженного файла CSV
читает значения заголовков и передает эти заголовки в другой класс, который расширяет Form
. Цель состояла в том, чтобы, наконец, заполнить этот переданный список заголовков в ChoiceField
. Чтобы получить аргументы, я перебрал __init__
.
Каким-то образом при переопределении __init__
мое поле выбора исчезает, без каких-либо исключений. ChoiceField появляется, когда я непосредственно использую ChoiceFields
и не переопределяю метод __init__
. Я пытался изменить и поработать над различными способами переопределения, чтобы получить аргументы, но не смог добиться успеха, так как в каждом случае ChoiceField
пропадает. Я использую python version 3.7.1
и Django version 1.9.8
. Любой совет будет принят во внимание.
1.views.py:
def simple_upload(request):
if request.method == 'POST' and request.FILES['myfile']:
myfile = request.FILES['myfile']
fs = FileSystemStorage()
fs.save(myfile.name, myfile)
for row in myfile:
headerlist = row.decode('utf-8').split(",")
break
expense_form = ExpenseForm(headerlist)
return visualize_view(request, expense_form)
return render(request, 'core/simple_upload.html')
def visualize_view(request, expense_form):
return render(request,'core/visualize_view.html',{'expense_form':expense_form})
2.forms.py:
from django import forms
class ExpenseForm(forms.Form):
def __init__(self, headerlist, *args, **kwargs):
super(ExpenseForm,self).__init__(*args, **kwargs)
CHOICES = []
for i in range(len(headerlist)):
c = (i, headerlist[i])
CHOICES.append(c)
columns = forms.ChoiceField(choices=CHOICES)
3.visualize.py:
{% extends 'base.html' %}
{% block content %}
{{ expense_form.as_p }}
{% endblock %}
РЕДАКТИРОВАТЬ:
4.urls.py
from django.conf.urls import url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from uploads.core import views
urlpatterns = [
url(r'^$', views.loginForm, name='loginForm'),
url(r'^uploads/', views.simple_upload, name='simple_upload'),
url(r'^admin/', admin.site.urls),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.AKASH_ROOT)