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, это может помочь