Преобразование текстов во внешние ключи при импорте данных с помощью 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)

Спасибо за помощь, наилучшие пожелания

Поскольку я не смог найти метод для этого, я решил эту проблему жестким способом.

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