【问题标题】:Filling the model with sample images用示例图像填充模型
【发布时间】:2022-10-04 16:26:47
【问题描述】:

模型.py

class Phrase(models.Model):
    image = models.ImageField(blank=True,
                              default="",
                              null=False,                              
 upload_to=UploadTo(folder=UPLOAD_TO.VOCABULARY_IMG_FOLDER).save_path)

脚本

sample_img_dir = os.path.join(settings.BASE_DIR, 'doc', 'samples', 'img')
sample_images = os.listdir(sample_img_dir)
img = random.choice(sample_images)
f = open(os.path.join(sample_img_dir, img))
sample_img = File(f)

obj = Phrase(
        image=sample_img
    )
obj.save()

我有一个带有 ImageField 的模型。我想用样本数据填充它。这与测试无关。我只想填充数据库以用于开发目的。我保存了大约 50 个 jpg 文件并决定以编程方式添加它们。

我失败得很惨。这段代码出现异常:

  File "/usr/lib/python3.8/codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
python-BaseException

Process finished with exit code 130 (interrupted by signal 2: SIGINT)

你可以帮帮我吗?

【问题讨论】:

    标签: django


    【解决方案1】:
    f = open(os.path.join(sample_img_dir, img), "rb")
    

    应该做的伎俩。如果没有,您可以尝试添加编码标准,例如

    f = open(os.path.join(sample_img_dir, img), "rb", encoding="utf-8")
    

    但我不确定这是否适用于字节,它可能只适用于"r"

    您还应该为文件命名:

    sample_img = File(f, img)
    

    如果您已经创建了模型,您可以稍后使用以下命令保存文件:

    phrase = Phrase.objects.get(pk=1)
    phrase.upload_to.save(img, content=sample_img))
    

    小编辑:

    您可以使用以下命令更快地创建新条目:

    phrase = Phrase.objects.create(
        image=sample_img
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多