[英]Can't insert data to the model from a CSV file upload in Django
After I click submit nothing happens, I think because it can't import Mobile from .models so that the from .models import Mobile from forms.py is unused.单击提交后什么也没有发生,我认为是因为它无法从 .models 导入 Mobile,因此from .models 从 forms.py 导入 Mobile未使用。 How to import it so that I can upload a CSV file successfully and insert the data to Mobile model.
如何导入它以便我可以成功上传 CSV 文件并将数据插入到移动模型中。
forms.py looks like this forms.py看起来像这样
import io
import csv
from django import forms
from .models import Mobile
class DataForm(forms.Form):
data_file = forms.FileField()
def clean_data_file(self):
f = self.cleaned_data['data_file']
if f:
ext = f.name.split('.')[-1]
if ext != 'csv':
raise forms.ValidationError('File Type not supported')
return f
def process_data(self):
f = io.TextIOWrapper(self.cleaned_data['data_file'].file)
Mobile = csv.DictReader(f)
for i in Mobile:
Mobile.objects.create_data(i['mobile_owner'], i['mobile_number'])
views.py looks like this: views.py看起来像这样:
from .models import Mobile
from django.views.generic import TemplateView
from .forms import DataForm
from django.views.generic import FormView
class DataView(FormView):
template_name = 'sms/mobile.html'
form_class = DataForm
success_url = '/upload/'
def form_valid(self, form):
form.process.data()
return super().form_valid(form)
mobile.html looks like this mobile.html看起来像这样
{% extends 'base/base.html' %}
{% block title %}Add SMS Data{% endblock title %}
{% block scripts %}
{% endblock scripts %}
{% block content %}
<form action="{% url 'mobile' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<label>Upload mobile numbers</label>
<input type="file" name="data_file">
<input type="submit" value="submit">
</form>
{% endblock content %}
urls.py looks like this: urls.py看起来像这样:
from django.urls import path, include
from . import views
urlpatterns = [
path('mobile', views.index, name='mobile'),
]
Hi it looks like you have typo in your form_valid
method.嗨,您的
form_valid
方法中似乎有错字。
from .models import Mobile
from django.views.generic import TemplateView
from .forms import DataForm
from django.views.generic import FormView
class DataView(FormView):
template_name = 'sms/mobile.html'
form_class = DataForm
success_url = '/upload/'
def form_valid(self, form):
form.process_data()
return super().form_valid(form)
Change form.process.data()
to form.process_data()
and you should be good to go.将
form.process.data()
更改为form.process_data()
就可以了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.