Преобразование текстов во внешние ключи при импорте данных с помощью Django excel
Тбл.1
id | author | brand_id | name | barcode | unit |
---|---|---|---|---|---|
user1 | TestBrand1 | Product1 | TST1234 | 700 | |
user2 | TestBrand2 | Product2 | TST5678 | 380 |
У меня есть электронная таблица excel, как в примере выше. author
и brand_id
в полях таблицы представляют поля foreignkey в модели.
Когда пользователь хочет добавить продукт в систему с помощью excel, он/она должен ввести автора и бренд в виде строк. Как в таблице в примере выше.
Но поскольку author
и brand_id
являются внешними ключами, excel должен быть таким.`
Тбл.2
id | author | brand_id | name | barcode | unit |
---|---|---|---|---|---|
1 | 1 | Product1 | TST1234 | 700 | |
2 | 2 | Product2 | TST5678 | 380 |
Мой вопрос заключается в том, как я могу динамически преобразовать данные об авторе и бренде, полученные в виде строк, в внешний ключ базы данных и сохранить его.
Например, если brand_id
= TestBrand1, я хочу записать id этого бренда в базу данных. (Как в Tbl.2)
Вот мои модели продуктов:
class Product(models.Model):
id = models.AutoField(primary_key=True)
author = models.ForeignKey(User,on_delete= models.CASCADE, verbose_name='Product Author', null=True)
brand_id = models.ForeignKey(Brand,on_delete=models.CASCADE, verbose_name="Brand Names")
name = models.CharField(max_length=255, verbose_name="Product Name",unique=True)
barcode = models.CharField(max_length=255, verbose_name="Barcode")
unit = models.CharField(max_length=255,verbose_name="Product Unit")
def __str__(self):
return self.name
Вот мои мнения о продукте:
@login_required(login_url="login")
def addProduct(request):
.
.
.
.
.
elif 'save_file' in request.POST:
dataset = Dataset()
new_products = request.FILES['product_file']
if not new_products.name.endswith('xlsx'):
messages.info(request,'Wrong file format!')
return redirect(".")
imported_data = dataset.load(new_products.read(), format='xlsx')
for data in imported_data:
values = Product(
data[0],
data[1],
data[2],
data[3],
data[4],
data[5],
)
values.save()
messages.success(request,"Product added from file succesfully!")
return redirect("products")
context = {
.
.
.
.
}
return render(request,"product/addproduct.html",context)
Спасибо за помощь, наилучшие пожелания
Поскольку я не смог найти метод для этого, я решил эту проблему жестким способом.