Skip to main content

Dynamic proxy models for Django

Project description

django_dynproxy
===============

Dynamic proxy models for Django

With django_dynproxy, you can dynamically modify a Django proxy model by :
* hiding one or many fields (from the concrete parent model)
* making mandatory one or many fields (who are not mandatory in the concrete parent model)

This can be useful when you want to use inheritance in your code, but not in your database

WARNING : THIS IS AN ALPHA RELEASE. NOT RECOMMENDED FOR PRODUCTION USE

Requirements :
--------------

django>=1.4.3

Installation :
--------------

pip install django_dynproxy

Usage :
---------

1) Create a concrete model

2) Create a Django proxy model deriving from the concrete model

3) Define a metaclass using dynproxy_metaclass_factory and specify :
- which base fields you want to exclude from your proxy model
- which non-mandatory base fields you want to be mandatory your proxy model

4) Add the __metaclass__ to your proxy model class


Sample :
---------

from dynproxy.utils import dynproxy_metaclass_factory

TRAVELER_TYPE_PILOT = '1'
TRAVELER_TYPE_PASSENGER = '2'

TRAVELER_TYPES = (
(TRAVELER_TYPE_PILOT,_(u"Pilot")),
(TRAVELER_TYPE_PASSENGER,_(u"Passenger"))
)

class Traveler(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
type = models.CharField(max_length=200,choices=TRAVELER_TYPES)
passport_number = models.CharField(max_length=200,blank=True)
trigram = models.CharField(max_length=200,blank=True)
pilot_category = models.ForeignKey(PilotCategory,null=True,blank=True)


def __unicode__(self):
return "%s %s" % (self.first_name,self.last_name)

def traveler_manager_factory(traveler_type):
class _TravelerManager(Manager):
def get_query_set(self):
return super(_TravelerManager,self).get_query_set().filter(type=traveler_type)
return _TravelerManager

PilotManager = traveler_manager_factory(TRAVELER_TYPE_PILOT)
PassengerManager = traveler_manager_factory(TRAVELER_TYPE_PASSENGER)


PilotMetaclass = dynproxy_metaclass_factory(
mandatory_fields=['trigram','pilot_category'],
fields_to_exclude=['passport_number']
)

PassengerMetaclass = dynproxy_metaclass_factory(
mandatory_fields = ['passport_number'],
fields_to_exclude =['trigram','pilot_category']
)


class Pilot(Traveler):
__metaclass__ = PilotMetaclass
objects = PilotManager()
class Meta:
proxy = True

class Passenger(Traveler):
__metaclass__ = PassengerMetaclass
objects = PassengerManager()
class Meta:
proxy = True

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_dynproxy-0.2.0.zip (3.3 kB view details)

Uploaded Source

File details

Details for the file django_dynproxy-0.2.0.zip.

File metadata

  • Download URL: django_dynproxy-0.2.0.zip
  • Upload date:
  • Size: 3.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for django_dynproxy-0.2.0.zip
Algorithm Hash digest
SHA256 90057e280074c71eb4004248b68a2e60250715ad4ba143b1c3265a99eb0bdf5c
MD5 111a137b0b5e16cc1ce9ba80f5ad9cbe
BLAKE2b-256 7b10b28e8f9f5e4b82b9462c52eeead8c1158ac355eddf67c4a2f3d772d703b4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page