Django 'int' объект не подписывается шоу при добавлении изображений в базу данных - PullRequest
0 голосов
/ 07 сентября 2018

Я вставляю несколько изображений в базу данных. Я сохранил новое имя изображения Dictonary. Но при вставке данных в таблицу я получаю ОШИБКУ: 'int' object is not subscriptable'

Я искал везде, но не смог найти решение.

Вот как выглядит Dictonary

    {
    "0" = {
        "blog_id" = "". 
        "blog_image_path" = "07-09-2018__17-54-152069weather.jpg". 
        "is_deleted" = 0
    }. 
    "1" = {
        "blog_id" = "". 
        "blog_image_path" = "07-09-2018__17-54-152069user.png". 
        "is_deleted" = 0
    }. 
    "2" = {
        "blog_id" = "". 
        "blog_image_path" = "07-09-2018__17-54-152069tick.png". 
        "is_deleted" = 0
    }
}

Теперь при добавлении БД

for image in blog_images_data:
    blog_image_data = BlogImages(blog_id=int(blog_id), blog_image_path=image['blog_image_path'], is_deleted=int(image['is_deleted']))# I GET ERROR IN THIS LINE
    blog_image_data.save()

Я даже изменил тип данных на INT, но ошибка все еще сохраняется.

Ниже приведены сведения о модели

class BlogImages(models.Model):
blog_image_id = models.AutoField(primary_key=True)
blog = models.ForeignKey(Blog, null=True, on_delete=models.CASCADE)
blog_image_path = models.TextField(null=True)
is_deleted = models.SmallIntegerField(default=0, editable=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

class Meta:
    db_table = 'tbl_blog_images'

СПАСИБО ЗА ПРЕДЕЛА

1 Ответ

0 голосов
/ 07 сентября 2018

В вашем коде цикл for перебирает ключи словаря . Таким образом, изображение 0, 1, 2 и т. Д.

Если это действительно словарь (синтаксис не совсем правильный), он должен выглядеть следующим образом:

for <b>blog_id, image</b> in blog_images_data<b>.items()</b>:
    blog_image_data = BlogImages(
        blog_id=int(blog_id),
        blog_image_path=image['blog_image_path'],
        is_deleted=int(image['is_deleted'])
    )
    blog_image_data.save()

Таким образом, мы перебираем пары ключ-значение с .items() и выполняем обработку с image, являющимся субдискретным.

Мы можем выполнить создание объекта и сохранить его в базе данных за один вызов:

for blog_id, image in blog_images_data.items():
    blog_image_data = BlogImages<b>.objects.create</b>(
        blog_id=int(blog_id),
        blog_image_path=image['blog_image_path'],
        is_deleted=int(image['is_deleted'])
    )

Примечание : обычно модели имеют единственные имена, поэтому BlogImage вместо BlogImages.

...