diff --git a/trademark/migrations/0002_nice_glyph.py b/trademark/migrations/0002_nice_glyph.py new file mode 100644 index 0000000..0c15c20 --- /dev/null +++ b/trademark/migrations/0002_nice_glyph.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('trademark', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='nice', + name='glyph', + field=models.CharField(default='', max_length=255), + preserve_default=False, + ), + ] diff --git a/trademark/models.py b/trademark/models.py index 4fccd83..a3702ae 100644 --- a/trademark/models.py +++ b/trademark/models.py @@ -2,6 +2,7 @@ from django.db import models from django.db.models.signals import post_save, pre_save from django.dispatch import receiver +from django.db import connection from django.utils.translation import ugettext_lazy as _ @@ -14,6 +15,9 @@ from datetime import date from datetime import timedelta # from .cms_appconfig import TrademarkConfig +from collections import defaultdict +import re + TrademarkAPI = TrademarkSearchAPI() class Owner(models.Model): @@ -37,6 +41,7 @@ class Nice(models.Model): nice_id = models.IntegerField() title = models.CharField(max_length=255) description = models.TextField() + glyph = models.CharField(max_length=255) class Meta: verbose_name = _('nice') @@ -49,6 +54,54 @@ class Nice(models.Model): def __str__(self): return self.title + @property + def popular_products(self): + ids = [str(pid) for pid in Product.objects.filter(nice_id=self.nice_id).values_list('id', flat=True)] + cursor = connection.cursor() + query = "SELECT product_id, count(trademark_id) FROM trademark_trademark_products WHERE product_id IN (%s) GROUP BY product_id ORDER BY count(trademark_id) DESC" % ','.join(ids) + cursor.execute(query) + top_ids = [result[0] for result in cursor.fetchall() if result[1] > 10] + products = Product.objects.filter(id__in=top_ids) + + return sorted(products, key=lambda p: top_ids.index(p.pk)) + + @property + def popular_products_alphabet(self): + alphabet = defaultdict(lambda : defaultdict(list)) + for product in self.popular_products: + letter = product.title[0].upper() + first_word = product.title.split(' ')[0] + + # if title_sense: + alphabet[letter][first_word.capitalize()].append(product) + # elif not alphabet[letter][first_word.capitalize()]: + # alphabet[letter][first_word.capitalize()] = [] + + for letter, words in alphabet.items(): + for first_word, products in words.items(): + if len(products) == 1: + del alphabet[letter][first_word] + product = products.pop() + words = product.title + alphabet[letter][words] = product.id + else: + words = [] + for product in alphabet[letter][first_word]: + title = re.sub("[\(\[].*?[\)\]]", "", product.title) + title_sense = title.replace(first_word, '').strip() + if title_sense: + words.append(title_sense) + # words = [product.title for product in alphabet[letter][first_word]] + + alphabet[letter][first_word] = ', '.join(set(words)) + letter_items = alphabet[letter] + alphabet[letter] = sorted(letter_items.items(), key=lambda x: type(x[1]), reverse=True) + # alphabet[letter] = letter_items.items() + + print alphabet + return sorted(alphabet.items()) + + class Product(models.Model): title = models.TextField() diff --git a/trademark/templates/trademark/form.html b/trademark/templates/trademark/form.html index 7e74eae..6db8c8b 100644 --- a/trademark/templates/trademark/form.html +++ b/trademark/templates/trademark/form.html @@ -2,7 +2,7 @@