首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用外键大容量创建模型

使用外键大容量创建模型
EN

Stack Overflow用户
提问于 2021-09-12 19:46:53
回答 1查看 1.1K关注 0票数 4

我有这两种模式:

代码语言:javascript
复制
class Item(models.Model):
    item_id = models.CharField(max_length=10, primary_key=True)
    item_name = models.CharField(max_length=100)
    description = models.CharField(max_length=500)
    slug = models.CharField(max_length=200)
    price = models.FloatField()
    
    def __str__(self):
        return self.item_name
代码语言:javascript
复制
class Image(models.Model):
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    image_url = models.CharField(max_length=200)

我有很多项目,每个项目都有一些图片分配给它。

要在数据库中添加项,我通过批量创建:

代码语言:javascript
复制
    it = (Item(
            item_id = item['id'],
            item_name= item['title'],
            description = item['description'],
            slug = item['slug'],
            price =  item['price']['amount']
            )
        for item in items
    )
    while True:
        batch = list(islice(it, batch_size))
        if not batch:
            break
        Item.objects.bulk_create(batch, batch_size)

一切都很好,好吗。但是我也想对这些图像做同样的处理,因为我有太多的图像无法单独处理。

现在我这样做:

代码语言:javascript
复制
for item in items:
    for image in item['images']:
        Item.objects.get(item_id = item['id']).image_set.create(image_url = image['urls']['big'])

但是这在提升所有图像方面太慢了(可能需要30分钟),所以我想像使用项目一样批量上传,但是由于图像模型将项作为外键,所以我不能这样做。如何以更有效的方式上传图片?

我正在使用SQLite,我知道使用另一个数据库系统会加快进程,但是无论如何,我认为有一个更快的方法来上传所有的图像。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-03-17 14:25:53

我在使用SQLite时遇到了类似的问题,但在我的例子中,在保存对象之前我还没有生成id。有关批量创建的文档给出了提示:

如果模型的主键是AutoField,则只能在某些数据库(当前为PostgreSQL、MariaDB 10.5+和SQLite 3.35+)上检索主键属性。在其他数据库上,它将不会被设置。批量创建

我转到Postgres工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69154720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档