简体   繁体   English

无法将数据从 Django 中上传的 CSV 文件插入模型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM