32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
import logging
|
|
|
|
from django.core.management.base import BaseCommand
|
|
from django.db import transaction
|
|
|
|
from core.models import Product
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = "Populate slug field for all Product instances"
|
|
|
|
def handle(self, *args, **options):
|
|
qs = Product.objects.filter(slug__isnull=True)
|
|
total = qs.count()
|
|
self.stdout.write(f"Starting slug population for {total} products")
|
|
|
|
for idx, product in enumerate(qs.iterator(), start=1):
|
|
try:
|
|
product.slug = None
|
|
with transaction.atomic():
|
|
product.save(update_fields=["slug"])
|
|
|
|
self.stdout.write(
|
|
self.style.SUCCESS(f"[{idx}/{total}] (Product ID: {product.pk}) slug set to '{product.slug}'")
|
|
)
|
|
except Exception as e:
|
|
logger.exception(f"Product {product.pk}: slug population failed")
|
|
self.stderr.write(self.style.ERROR(f"[{idx}/{total}] (Product ID: {product.pk}) ERROR: {e}"))
|
|
|
|
self.stdout.write(self.style.SUCCESS("Slug population complete."))
|