【问题标题】:How to Process Uploaded file in Django Model save method如何在 Django 模型保存方法中处理上传的文件
【发布时间】:2014-11-20 07:34:15
【问题描述】:

在 django 默认管理面板中,我需要存储从 excel 文件上传的所有密码

为此我开发了两个模型 Pincodes 和 UploadPinFile。

我正在尝试通过 UploadPinFile 的保存方法将所有密码保存到 Pincode 模型

但它返回给我一个错误如下

强制转换为 Unicode:需要字符串或缓冲区,找到 FieldFile

下面给出两个模型定义

class UploadPincode(models.Model):
    added_on = models.DateField(auto_now_add=True)
    pincode_file = models.FileField(
        upload_to="Pincodes/", verbose_name="Pincode Excel file (.xls,xlsx)", blank=False, null=False)

    def save(self):
        book = open_workbook(self.pincode_file)
        for j in range(0, book.nsheets - 1):
            sheet = book.sheet_by_index(j)
            for i in range(sheet.nrows):
                if i != 0:
                    a = sheet.row_values(i)
                    int_pin = int(a[0])
                    Pincode(pincode=str(int_pin)).save()
    def __unicode__(self):
        return str(self.added_on)

class Pincode(models.Model):
    pincode = models.CharField(
        max_length=100, verbose_name=u'available pincode', null=True, blank=True)

    def __unicode__(self):
        return self.pincode

示例 Pincode 文件包含

712409  YES
713101  YES
713102  YES
713103  YES
713201  YES
713202  YES
713203  YES

【问题讨论】:

    标签: python django


    【解决方案1】:

    您只需为过程创建一个定义。它会从内部调用 save() 方法...

    您只需遵循此代码:

    class UploadPincode(models.Model):
        added_on = models.DateField(auto_now_add=True)
        pincode_file = models.FileField(
            upload_to="Pincodes/", verbose_name="Pincode Excel file (.xls,xlsx)", blank=False, null=False)
    
        def save(self):
            print "Before Save #######"
    
            super(UploadPincode, self).save()
            print " Save #######"
    
            pincode_process(self.pincode_file.url)
    
    
        def __unicode__(self):
            return str(self.added_on)
    
    
    
    def pincode_process(pincode_file=None):
    
        print "Pincode Adding ##########################",pincode_file,pincode_file[1:]
    
    
        book = open_workbook(pincode_file[1:])
        for j in range(0, book.nsheets - 1):
            sheet = book.sheet_by_index(j)
            for i in range(sheet.nrows):
                if i != 0:
                    a = sheet.row_values(i)
                    int_pin = int(a[0])
                    Pincode(pincode=str(int_pin)).save()
    
        return True
    

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 2015-03-21
      • 2015-02-24
      • 2012-04-22
      • 2021-10-11
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 2021-02-20
      相关资源
      最近更新 更多