Django - Как импортировать данные csv с моделью, которая имеет внешний ключ к экземпляру той же модели?

Я пытаюсь импортировать данные из файла CSV в модель Категория, которая выглядит примерно так:

class Categories(BaseModel):

    shop_id = models.SmallIntegerField(default=1, blank=True)
    parent_id = models.ForeignKey('self', on_delete=models.CASCADE, blank=True, null=True)
    name_en = models.CharField(max_length=255)
    name_fr = models.CharField(max_length=255, null=True, blank=True)

Я работаю над сценарием для загрузки csv и чтения данных для создания экземпляра модели, но как я могу получить экземпляр Categories, связанный с parent_id, когда он еще не создан.

Таким образом, ваши внешние поля не должны заканчиваться на _id (parent_id в данном случае). Это потому, что django будет принимать или возвращать целочисленный id этого внешнего ключа, когда вы добавите _id. Это имеет больше смысла в примере здесь:

catgeory = Categories.objects.first()
parent_category = Categories.objects.last()

category.parent = parent_category
category.save()

print(category.parent) # <Categories object...>
print(category.parent_id) # "1"

Теперь я полагаю, что ваш код должен будет сделать category.parent_id_id, что выглядит странно.

Как это может работать?

categories_to_create = []

for row in csv:
  c = Categories(parent_id_id=row[1], shop_id=row[0]...)
  categories_to_create.push(c)

Categories.objects.bulk_create(categories_to_create)

Я не уверен, что это сработает, если нет, возможно, вы можете попробовать прочитать csv прямо в вашу базу данных, например, если вы используете postgres, это может помочь

Вернуться на верх