-value_content_type_limiter = ContentTypeRegistryLimiter()
-
-
-def register_value_model(model):
- value_content_type_limiter.register_class(model)
-
+class ManyToManyValue(models.Model):
+ content_type = models.ForeignKey(ContentType, related_name='many_to_many_value_set', limit_choices_to=value_content_type_limiter, verbose_name='Value type', null=True, blank=True)
+ object_ids = models.CommaSeparatedIntegerField(max_length=300, verbose_name='Value IDs', null=True, blank=True)
+
+ def get_value(self):
+ return self.content_type.model_class()._default_manager.filter(id__in=self.object_ids)
+
+ def set_value(self, value):
+ if not isinstance(value, models.query.QuerySet):
+ raise TypeError("Value must be a QuerySet.")
+ self.content_type = ContentType.objects.get_for_model(value.model)
+ self.object_ids = ','.join(value.values_list('id', flat=True))
+
+ value = property(get_value, set_value)
+
+ def __unicode__(self):
+ return unicode(self.value)
+
+ class Meta:
+ app_label = 'philo'