def extract_terms(sender, instance, **kw): if instance.terms.all() or settings.DISABLE_TERMS: return terms = (t for t in utils.extract_terms(instance.description) if len(t) >= settings.MIN_TERM_LENGTH) for term in terms: this_term, created = Term.objects.get_or_create(term=term) instance.terms.add(this_term)
def save(self, terms=True, *args, **kwargs): # parse UA and stick it into separate fields parsed = ua_parse(self.user_agent) if parsed: self.product = parsed['browser'].id self.version = parsed['version'] self.platform = parsed['platform'] new = not self.pk super(Opinion, self).save(*args, **kwargs) # Extract terms from description text and save them if this is new. if new and terms: terms = (t for t in extract_terms(self.description) if len(t) >= settings.MIN_TERM_LENGTH) for term in terms: this_term, created = Term.objects.get_or_create(term=term) this_term.save() self.terms.add(this_term)