为了账号安全,请及时绑定邮箱和手机立即绑定

Django:从 CSV 导入数据 - 元组索引必须是整数或切片,而不是 str

Django:从 CSV 导入数据 - 元组索引必须是整数或切片,而不是 str

明月笑刀无情 2022-01-05 10:45:29
在我的 Django APP 中,我想将数据从 CSV 上传到模型。为了读取数据,我正在使用pandas库。但我收到此错误:文件“D:\web_proyects\stickers-gallito-app\shop\management\commands\categories.py”,第 23 行,在 tmp_data_categories.iterrows() 中的行类型错误:元组索引必须是整数或切片,而不是 str我在想是不是因为我如何制定我的 for 循环来读取数据。模型.py:class Category(models.Model):    category = models.CharField(max_length=250, unique=True)    slug = models.SlugField(max_length=250, unique=True)    description = models.TextField(blank=True)    image = models.ImageField(upload_to='category', blank=True, null=True)    video = EmbedVideoField(null=True, blank=True)    class Meta:        ordering = ('category',)        verbose_name = 'category'        verbose_name_plural = 'categories'    def get_url(self):        return reverse('shop:allCat', args=[self.slug])    def __str__(self):        return '{}'.format(self.name)命令/类别.py:import pandas as pdimport csvfrom shop.models import Categoryfrom django.core.management.base import BaseCommandtmp_data_categories=pd.read_csv('static/data/categories.csv',sep=',', encoding="utf-8")class Command(BaseCommand):    def handle(self, **options):        categories = [            Category(                category=row['category'],                slug=row['product'],                subcategory=row['slug'],                subcategory_slug=row['description'],                description=row['size'],                image =row['quantity'],                video=row['image'],        )            for row in tmp_data_categories.iterrows()        ]        Category.objects.bulk_create(categories)调用时出现错误:python manage.py categories
查看完整描述

2 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

因为 iter overiteritems返回一个你不能使用字符串索引的 tupe。该元组的第二个元素是可使用字符串名称下标的 pandas 系列。所以你应该做


categories = [

            Category(

                category=row['category'],

                slug=row['product'],

                subcategory=row['slug'],

                subcategory_slug=row['description'],

                description=row['size'],

                image =row['quantity'],

                video=row['image'],

        )

            for _, row in tmp_data_categories.iterrows()

        ] 


查看完整回答
反对 回复 2022-01-05
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

这不起作用,因为 django 的models.py不是类似 dict 的对象。


但是,当您不需要时,为什么要在这里使用熊猫。证人:


tmp_data_categories=csv.DictReader('static/data/categories.csv', fieldnames=['category', 'product', 'slug', 'description', 'size', 'quantity', 'image'])


categories = [

            Category(

                category=row['category'],

                slug=row['product'],

                subcategory=row['slug'],

                subcategory_slug=row['description'],

                description=row['size'],

                image =row['quantity'],

                video=row['image'],

        )

            for row in tmp_data_categories

        ]

希望有帮助。


查看完整回答
反对 回复 2022-01-05
  • 2 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信