Как в Django import-export импортировать все товары с определенной характеристикой?

Чтобы импортировать все товары с определенной характеристикой с использованием Django import-export, вам потребуется выполнить несколько шагов.

1. Установите пакет django-import-export, если он еще не установлен, с помощью команды pip install django-import-export.

2. Подключите import_export в вашем проекте, добавив 'import_export' в список INSTALLED_APPS в настройке settings.py.

INSTALLED_APPS = [
    ...
    'import_export',
    ...
]

3. Создайте модель, представляющую ваш товар, например:

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100)
    characteristic = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=10, decimal_places=2)

4. Создайте файл resources.py, где вы определите ресурс для вашей модели Product:

from import_export import resources
from .models import Product

class ProductResource(resources.ModelResource):
    class Meta:
        model = Product
        fields = ('name', 'characteristic', 'price')

5. Создайте представление или функцию для обработки импорта товаров:

from import_export.formats import base_formats
from .resources import ProductResource
from django.http import HttpResponse
from import_export.forms import ImportForm

def import_products(request):
    if request.method == 'POST':
        form = ImportForm(request.POST, request.FILES)
        if form.is_valid():
            file = form.cleaned_data['import_file']
            data = file.read()
            dataset = ProductResource().create_dataset(data)
            imported_data = ProductResource().import_data(dataset, dry_run=True, raise_errors=False,
                                                          use_transactions=False, collect_failed_rows=True)
            if not imported_data.has_errors():
                ProductResource().import_data(dataset, dry_run=False, raise_errors=True,
                                              use_transactions=False)
                return HttpResponse('Products imported successfully')
            else:
                errors = imported_data.row_errors()
                return HttpResponse(errors)
    else:
        form = ImportForm()
    return render(request, 'import.html', {'form': form})

6. Создайте шаблон import.html, где вы добавите форму для загрузки файла CSV/Excel:

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Import</button>
</form>

7. Создайте URL-маршрут, который будет ссылаться на ваше представление или функцию импорта:

from django.urls import path
from .views import import_products

urlpatterns = [
    ...
    path('import/', import_products, name='import'),
    ...
]

Теперь вы можете загрузить файл CSV/Excel с товарами с определенной характеристикой, используя форму импорта.