class Phrase(models.Model): label = models.CharField(maxlength=100, primary_key=True) class LabelSum(models.Model): content_type = models.ForeignKey(ContentType, db_index=True) object_id = models.PositiveIntegerField(db_index=True) phrase = models.ForeignKey(Phrase, db_index=True, related_name="label_sum_phrase") count = models.PositiveIntegerField(default=0, editable=False) class Meta: unique_together = (('content_type', 'object_id', 'phrase'),) verbose_name = _('label count') verbose_name_plural = _('label counts') class Label(models.Model): content_type = models.ForeignKey(ContentType, db_index=True) object_id = models.PositiveIntegerField(db_index=True) phrase = models.ForeignKey(Phrase, db_index=True, related_name="label_phrase") user = models.ForeignKey(User, null=True, db_index=True) ip = models.IPAddressField(editable=False) post_date = models.DateTimeField(auto_now=True, editable=False) class Meta: unique_together = (('content_type', 'object_id', 'phrase', 'user'),) ordering = ['-post_date'] verbose_name = _('label') verbose_name_plural = _('labels')