@anton_zaboev

Не могу загрузить данные в таблицу бд?

Добрый день! Не могу загрузить данные из csv файла в таблицу бд. Загружаю через команды django. Вот файл команды через которую я загружаю файл.
from csv import DictReader
from django.core.management import BaseCommand

# Import the model
# from children.models import children
from ads.models import Ads, Category
from users.models import User

ALREDY_LOADED_ERROR_MESSAGE = """
If you need to reload the child data from the CSV file,
first delete the db.sqlite3 file to destroy the database.
Then, run `python manage.py migrate` for a new empty
database with tables"""


class Command(BaseCommand):
    # Show this when the user types help
    help = "Loads data from children.csv"

    def handle(self, *args, **options):

        # Show this if the data already exist in the database
        if Ads.objects.exists():
            print('child data already loaded...exiting.')
            print(ALREDY_LOADED_ERROR_MESSAGE)
            return

        # Show this before loading the data into the database
        print("Loading childrens data")

        # Code to load the data into database
        for row in DictReader(open('./datasets/ad.csv', encoding='utf-8')):
            author_id = User.objects.get(id=row['author_id'])
            category_id = Category.objects.get(id=row['category_id'])
            child = Ads.objects.create(
                        name=row['name'],
                        author_id=author_id,
                        price=row['price'],
                        description=row['description'],
                        is_published=row['is_published'].lower().title(),
                        image=row['image'],
                        category_id=category_id
            )


Вот модель в которую загружаю
from django.db import models

# Create your models here.
from users.models import User


class Category(models.Model):
    name = models.CharField(max_length=500)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Категория'
        verbose_name_plural = 'Категории'


class Ads(models.Model):
    name = models.CharField(max_length=500)
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    price = models.PositiveIntegerField(null=True)
    description = models.CharField(max_length=1000, null=True)
    is_published = models.BooleanField(default=False)
    image = models.ImageField(upload_to='ads/', null=True, blank=True)
    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Объявление'
        verbose_name_plural = 'Объявления'

Вот ссылка на гит
При загрузке выходит ошибка TypeError: Field 'id' expected a number but got .
Подскажите что я сделал не так и как это можно исправить? Просто до этого было все ок и после того как я очистил таблицы не могу загрузить данные повторно
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы