Skip to content

Commit

Permalink
Migrate question product tags to products M2M.
Browse files Browse the repository at this point in the history
  • Loading branch information
rlr committed Dec 26, 2012
1 parent 8af3579 commit 8324cf9
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions migrations/194-questions-product-migration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
from django.utils.encoding import smart_str

from products.models import Product
from taggit.models import Tag
from questions.models import Question

tags_to_migrate = {
# source tag -> product
'desktop': ['firefox'],
'mobile': ['mobile']
}


def assert_equals(a, b):
assert a == b, '%s != %s' % (a, b)


def run():
# Get all the tags to migrate.
tags = list(Tag.objects.filter(slug__in=tags_to_migrate.keys()))

total_affected = 0

# For each tag, get the question and add a product for it.
for tag in tags:
for product_slug in tags_to_migrate[tag.slug]:
product = Product.objects.get(slug=product_slug)

# Assign the product to all the questions tagged with tag.
# Pull in 5000 at a time from the db.
n = 5000
qs = Question.objects.filter(tags__slug=tag.slug)
count = qs.count()
print '%s %s questions to work on...' % (count, product_slug)
for i in range(0, count, n):
for question in qs[i:i + n]:
question.products.add(product)

print 'Added product "%s" to question "%s"' % (
smart_str(product.slug), smart_str(question.title))
total_affected += 1

print 'Done! (%d)' % total_affected

0 comments on commit 8324cf9

Please sign in to comment.