получение объекта 'bytes' не имеет атрибута 'encode' - PullRequest
0 голосов
/ 19 апреля 2020

Моя задача: загрузить файл CSV в Django модель, мой model.py указан ниже

from django.db import models

# Create your models here.
class Chart(models.Model):
    date=models.DateTimeField(blank=True,null=True)
    open=models.DecimalField(max_digits=10,decimal_places=3,null=True,blank=True)
    high=models.DecimalField(max_digits=10,decimal_places=3,null=True,blank=True)
    low=models.DecimalField(max_digits=10,decimal_places=3,null=True,blank=True)
    close=models.DecimalField(max_digits=10,decimal_places=3,null=True,blank=True)

    def __str__(self):
        return self.str(date)
class NSEBHAV(models.Model):
    symbol=models.CharField(max_length=20,null=True,blank=True)
    series=models.CharField(max_length=2,null=True,blank=True)
    open=models.DecimalField(max_digits=10,decimal_places=3,null=True,blank=True)
    high=models.DecimalField(max_digits=10,decimal_places=3,null=True,blank=True)
    low=models.DecimalField(max_digits=10,decimal_places=3,null=True,blank=True)
    close=models.DecimalField(max_digits=10,decimal_places=3,null=True,blank=True)
    last=models.DecimalField(max_digits=10,decimal_places=3,null=True,blank=True)
    prev_close=models.DecimalField(max_digits=10,decimal_places=3,null=True,blank=True)
    tottrdqty=models.IntegerField(null=True,blank=True)
    tottrdval=models.DecimalField(max_digits=10,decimal_places=3,null=True,blank=True)
    timestamp=models.DateTimeField(blank=True,null=True)
    totaltrades=models.CharField(max_length=20,null=True,blank=True)
    isin=models.CharField(max_length=20,null=True,blank=True)

    def __str__(self):
        return self.symbol

Мой файл view.py указан ниже

import csv,io
from django.shortcuts import render
from django.contrib import messages
from .models import NSEBHAV,Chart
# Create your views here.
def upload_nse(request):
    template='upload.html'
    data=NSEBHAV.objects.all()
    prompt={
        'order': 'Order of the CSV should be (symbol,series,open,high,low,close,last,prevclose,tottrdqty,tottrdval,timestamp,totaltrades,isin',
        'profiles': data   
    }
    if request.method=='GET':
        return render(request,template,prompt)
    csv_file=request.FILES['file']
    print(csv_file)
    # if not csv_file.name.endwith('.csv'):
    #     messages.error(request,'This is not csv file')
    data_set=csv_file.read().encode('utf-8')
    io_string=io.StringIO(data_set)
    next(io_string)
    for column in csv.reader(io_string,delimiter=',',quotechar="|"):
         _, created = NSEBHAV.objects.update_or_create(
        symbol=column[0],
        series=column[1],
        open=column[2],
        high=column[3],
        low=column[4],
        close=column[5],
        last=column[6],
        prevclose=column[7],
        tottrdqty=column[8],
        tottrdval=column[9],
        timestamp=column[10],
        totaltrades=column[11],
        isin=column[12]
    )
    context = {}
    return render(request, template, context)

csv. Пример файла enter image description here

скриншот ошибки enter image description here

Мой html файл приведен ниже: спасибо заранее. Если я использую кодировать, это дает ту же ошибку, а также я хочу проверить тип загружаемого файла CSV или нет

1 Ответ

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

В учебнике не используется кодировка. Код:

data_set = csv_file.read().decode("UTF-8")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...