Hi, I am trying to make a django model that will show data from different other models as a single model. Kind of like a database view to a database table.
My idea is to make a custom field that maps to another field in some other model code for fields.py is as follows --------------------------------------------------------------------------------------- from django.db import models from django.db.models import get_model class ViewField(models.Field): def __init__(self, *args, **kwargs): model = get_model(kwargs['app'], kwargs['model']) if '__' in kwargs['field']: self.var_name, self.field_name = kwargs['field'].split ('__') else: self.var_name = '' self.field_name = kwargs['field'] for field in model._meta.fields: if field.name == self.field_name: self._field = field break else: return None del(kwargs['app']) del(kwargs['model']) del(kwargs['field']) super(ViewField, self).__init__(*args, **kwargs) def db_type(self): return self._field.db_type() def to_python(self, value): return self._field.to_python(value) def get_db_prep_value(self, value): return self._field.get_db_prep_value(value) def get_db_prep_lookup(self, lookup_type, value): return self._field.get_db_prep_lookup(lookup_type, value) def formfield(self, **kwargs): return self._field.formfield(**kwargs) def get_internal_type(self): return self._field.get_internal_type() def value_to_string(self, obj): return self._field.value_to_string(obj) def contribute_to_class(self, cls, name): return self._field.contribute_to_class(cls, name) --------------------------------------------------------------------------------------- I ve also made a custom manager. its code is as follows --------------------------------------------------------------------------------------- from django.db.models import get_model class ViewModelManager(models.Manager): def __init__(self, *args, **kwargs): self._model = get_model(kwargs['app'], kwargs['model']) del(kwargs['app']) del(kwargs['model']) super(ViewModelManager, self).__init__(*args, **kwargs) def get_query_set(self): return self._model.objects.get_query_set() def get_empty_query_set(self): return self._model.objects.get_empty_query_set() def none(self): return self._model.objects.none() def all(self): return self._model.objects.all() def count(self): return self._model.objects.count() def dates(self, *args, **kwargs): return self._model.objects.dates(*args, **kwargs) def distinct(self, *args, **kwargs): return self._model.objects.distinct(*args, **kwargs) def extra(self, *args, **kwargs): return self._model.objects.extra(*args, **kwargs) def get(self, *args, **kwargs): return self._model.objects.get(*args, **kwargs) def get_or_create(self, **kwargs): return self._model.objects.get_or_create(**kwargs) def create(self, **kwargs): return self._model.objects.create(**kwargs) def filter(self, *args, **kwargs): return self._model.objects.filter(*args, **kwargs) def aggregate(self, *args, **kwargs): return self._model.objects.aggregate(*args, **kwargs) def annotate(self, *args, **kwargs): return self._model.objects.annotate(*args, **kwargs) def complex_filter(self, *args, **kwargs): return self._model.objects.complex_filter(*args, **kwargs) def exclude(self, *args, **kwargs): return self._model.objects.exclude(*args, **kwargs) def in_bulk(self, *args, **kwargs): return self._model.objects.in_bulk(*args, **kwargs) def iterator(self, *args, **kwargs): return self._model.objects.iterator(*args, **kwargs) def latest(self, *args, **kwargs): return self._model.objects.latest(*args, **kwargs) def order_by(self, *args, **kwargs): return self._model.objects.order_by(*args, **kwargs) def select_related(self, *args, **kwargs): return self._model.objects.select_related(*args, **kwargs) def values(self, *args, **kwargs): return self._model.objects.values(*args, **kwargs) def values_list(self, *args, **kwargs): return self._model.objects.values_list(*args, **kwargs) def update(self, *args, **kwargs): return self._model.objects.update(*args, **kwargs) def reverse(self, *args, **kwargs): return self._model.objects.reverse(*args, **kwargs) def defer(self, *args, **kwargs): return self._model.objects.defer(*args, **kwargs) def only(self, *args, **kwargs): return self._model.objects.only(*args, **kwargs) def _insert(self, values, **kwargs): return self._model.objects._insert(values, **kwargs) def _update(self, values, **kwargs): return self._model.objects._insert(values, **kwargs) --------------------------------------------------------------------------------------- To make a view of a model Visit, I have the following code --------------------------------------------------------------------------------------- from fields import ViewField from models import ViewModelManager class VisitView(models.Model): id = ViewField(app = 'patient', model = 'visit', field = 'id', primary_key = True) name = ViewField(app = 'patient', model = 'patient', field = 'patient__name') fee = ViewField(app = 'patient', model = 'visit', field = 'fee') _base_manager = ViewModelManager(app = 'patient', model = 'visit') def __unicode__(self): return '%s' % self.id class Meta: managed = False --------------------------------------------------------------------------------------- I am new to django, so i dont know if my approach is correct. Any guidance is welcome peace goto -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.