Django - 从处理的"ImageField"数据中设置模型的"CharField"主键



这可能是一个问这个问题的糟糕方法,因为我还没有尝试过任何东西,因为我不确定如果没有向管理员添加一堆自定义JS,这是否可能。

给定一个模型,例如:

class MyModel(models.Model):
sku = models.CharField('SKU', max_length=20, primary_key=True)
bar_code = models.ImageField(upload_to='images/barcodes')

我希望用户选择一个图像,它将是产品条形码的照片。然后需要对图像进行处理以扫描条形码(我使用的是pyzbar(,并且该值应保存到主键字段sku中。

由于我无法在没有主键的情况下保存模型,并且我需要上传图像字段来扫描条形码以发现用于主键的值,我认为唯一的方法是在管理员中使用一些客户端JS,使用DRF端点(或类似端点(将图像上传到临时位置,读取条形码并将该值返回给客户端,然后客户端可以使用一些基本的javascript设置sku的值。然后可以保存模型并上传图像(第二次(。

在Django中有没有一种更简单的方法可以做到这一点,而不需要向管理员添加我自己的客户端JS,也不需要上传两次照片

除了主键之外,这可能会使事情变得复杂——您可以扩展ImageField并查看它如何填充其宽度和高度列,然后对pyzbar生成的条形码执行同样的操作。请参阅update_dimension_fields以获取信息:

更新字段的宽度和高度字段(如果已定义(。

此方法连接到模型的post_init信号以进行更新实例化模型实例后的维度。但是,尺寸如果尺寸字段已填充,则不会更新。这从中加载对象时避免了不必要的重新计算数据库

可以强制尺寸更新force=True,这就是为什么ImageFileDescriptorset调用此方法。

您可以添加一个方法来为pyzbar做这项工作,然后以相同的方式连接信号。

最新更新