Django:我需要做什么才能让csv文件真正加载到模型中?

2024-05-17 18:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使upload.html完全正常工作时遇到问题。html页面显示OK,我甚至可以选择csv文件进行上传。单击“添加数据”按钮时,它不会执行任何操作。我需要做什么才能将csv文件实际加载到模型中。下面是upload.html的代码,如下所示:

{% extends "myapp/base.html" %}
{% load bootstrap5 %}

{% block body_block %}
<div class="container">
    <h1>Please select csv file for upload</h1>
    <form action="" method="POST" enctype="multipart/form-data" class="form-control" >
        {% csrf_token %}

        {{ form }}
    
    </form>
    <button type="submit" class="btn btn-primary">Add data</button>
</div>
{% endblock %}

下面是forms.py

from django import forms
from .models import Csv
 
class CsvForm(forms.ModelForm):
    class Meta:
        model = Csv
        fields = ('file_name',)

下面是views.py

from django.shortcuts import render
from .forms import CsvForm
from .models import Csv
import csv
 
def upload_file_view(request):
 
    form = CsvForm(request.POST or None, request.FILES or None)
    # check whether it's valid:
    if form.is_valid():
        form.save()
        form = CsvForm()
        obj = Csv.objects.get(activated=False)
        with open(obj.file_name.path, 'r') as f:
            reader = csv.reader(f)
            for row in reader:
                # this is not working yet.
                print(row)
        obj.activated=True
        obj.save()
 
    context = {'form': form,}
    return render(request, 'csvs/upload.html', context)

下面是models.py

from django.db import models
 
class Csv(models.Model):
    file_name = models.FileField(upload_to='csvs/', max_length=100)
    uploaded = models.DateTimeField(auto_now_add=True)
    activated = models.BooleanField(default=False)
 
    def __str__(self):
        return "File id: {}".format(self.id)

我不完全理解代码。选择csv时,它是否可以位于任何目录中


Tags: csvfrompyimportformobjmodelsrequest
1条回答
网友
1楼 · 发布于 2024-05-17 18:29:31

因此Upload.html文件的按钮位于块外。因此,它必须更改为表单标记内部,如下所示

{% extends "myapp/base.html" %}
{% load bootstrap5 %}

{% block body_block %}
<div class="container">
    <h1>Please select csv file for upload</h1>
    <form action="" method="POST" enctype="multipart/form-data" class="form-control" >
        {% csrf_token %}

        {{ form }}
        <button type="submit" class="btn btn-primary">Add data</button>
    </form>
    
</div>
{% endblock %}

相关问题 更多 >