[subversion:5] base models for oid and composite pk

  • From: esimorre@kenai.com
  • To: commits@django-trac.kenai.com
  • Subject: [subversion:5] base models for oid and composite pk
  • Date: Fri, 3 Oct 2008 11:15:19 +0000 (GMT)

Repository: subversion
Revision:   5
Author:     esimorre
Date:       2008-10-03 11:15:13 UTC

Log Message:
-----------
base models for oid and composite pk
Permission1: test on dealing with composite pk

Modified Paths:
--------------
    tracdb_ext/admin.pylegacy/manager.pytracdb_ext/models.py

Added Paths:
-----------
    legacy/models.py

Diffs:
-----
Index: tracdb_ext/admin.py
===================================================================
--- tracdb_ext/admin.py (revision 4)
+++ tracdb_ext/admin.py (revision 5)
@@ -12,6 +12,12 @@
     list_filter = ('username', 'action')
 admin.site.register(Permission, PermissionAdmin)
 
+
+class Permission1Admin(admin.ModelAdmin):
+    list_display=('edit', 'username','action',)
+    list_filter = ('username', 'action')
+admin.site.register(Permission1, Permission1Admin)
+
 class TicketChangeAdmin(admin.ModelAdmin):
     #date_hierarchy = 'time'
     list_display=('time', 'ticket','author', 'field', 'oldvalue',
'newvalue')
Index: tracdb_ext/models.py
===================================================================
--- tracdb_ext/models.py        (revision 4)
+++ tracdb_ext/models.py        (revision 5)
@@ -2,11 +2,10 @@
 from django_trac.tracdb.models import Ticket
 from django_trac.tracdb import fields
 
-from django_trac.legacy.manager import Manager as CmpPKManager
+from django_trac.legacy.models import OIDModel, CmpPKModel
 # declared primary keys are not real primary keys
 
-class Enum(models.Model):
-    rowid = models.IntegerField(primary_key=True, editable=False)
+class Enum(OIDModel):
     type = fields.ShortTextField(blank=True)
     name = fields.ShortTextField(blank=True)
     value = fields.ShortTextField(blank=True)
@@ -19,21 +18,27 @@
 
 
 
-class Permission(models.Model):
-    rowid = models.IntegerField(primary_key=True, editable=False)
-    username = fields.ShortTextField(blank=True, primary_key=False)
-    action = fields.ShortTextField(blank=True, primary_key=False)
+class Permission(OIDModel):
+    username = fields.ShortTextField(blank=True)
+    action = fields.ShortTextField(blank=True)
     
-    #objects = CmpPKManager()
-    #_default_manager = objects
     def __unicode__(self):
         return '%s:%s' %(self.username, self.action)
     class Meta:
         db_table = u'permission'
         unique_together = ('username', 'action')
 
-class TicketChange(models.Model):
-    rowid = models.IntegerField(primary_key=True, editable=False)
+class Permission1(CmpPKModel):
+    username = fields.ShortTextField(blank=True, primary_key=True)
+    action = fields.ShortTextField(blank=True, primary_key=True)
+    
+    def __unicode__(self):
+        return '%s:%s' %(self.username, self.action)
+    class Meta:
+        db_table = u'permission'
+        unique_together = ('username', 'action')
+
+class TicketChange(OIDModel):
     #ticket = models.IntegerField(null=True, blank=True)
     ticket = models.ForeignKey(Ticket, db_column='ticket',
related_name='changes')
     time = models.IntegerField(null=True, blank=True)
@@ -45,8 +50,7 @@
         db_table = u'ticket_change'
         unique_together = ('ticket','time','field')
 
-class TicketCustom(models.Model):
-    rowid = models.IntegerField(primary_key=True, editable=False)
+class TicketCustom(OIDModel):
     #ticket = models.IntegerField(null=True, blank=True)
     ticket = models.ForeignKey(Ticket, db_column='ticket',
related_name='customs')
     name = fields.ShortTextField(blank=True)
@@ -55,8 +59,7 @@
         db_table = u'ticket_custom'
         unique_together = ('ticket','name')
 
-class Attachment(models.Model):
-    rowid = models.IntegerField(primary_key=True, editable=False)
+class Attachment(OIDModel):
     type = fields.ShortTextField(blank=True)
     id = fields.ShortTextField(blank=True)
     filename = fields.ShortTextField(blank=True)
@@ -69,8 +72,7 @@
         db_table = u'attachment'
         unique_together = ('type','id','filename')
 
-class AuthCookie(models.Model):
-    rowid = models.IntegerField(primary_key=True, editable=False)
+class AuthCookie(OIDModel):
     cookie = fields.ShortTextField(blank=True)
     name = fields.ShortTextField(blank=True)
     ipnr = models.IPAddressField(blank=True)
@@ -79,16 +81,14 @@
         db_table = u'auth_cookie'
         unique_together = ('cookie','ipnr','name')
 
-class Session(models.Model):
-    rowid = models.IntegerField(primary_key=True, editable=False)
+class Session(OIDModel):
     sid = fields.ShortTextField(blank=True)
     authenticated = models.BooleanField(null=True, blank=True)
     last_visit = models.IntegerField(null=True, blank=True)
     class Meta:
         db_table = u'session'
 
-class SessionAttribute(models.Model):
-    rowid = models.IntegerField(primary_key=True, editable=False)
+class SessionAttribute(OIDModel):
     sid = fields.ShortTextField(blank=True)
     authenticated = models.BooleanField(null=True, blank=True)
     name = fields.ShortTextField(blank=True)
@@ -98,8 +98,7 @@
         unique_together = ('sid','authenticated','name')
 
 
-class NodeChange(models.Model):
-    rowid = models.IntegerField(primary_key=True, editable=False)
+class NodeChange(OIDModel):
     rev = fields.ShortTextField(blank=True)
     path = fields.ShortTextField(blank=True)
     node_type = fields.ShortTextField(blank=True)
@@ -110,8 +109,7 @@
         db_table = u'node_change'
         unique_together = ('rev','path','change_type')
 
-class Wiki(models.Model):
-    rowid = models.IntegerField(primary_key=True, editable=False)
+class Wiki(OIDModel):
     name = fields.ShortTextField(blank=True)
     version = models.IntegerField(null=True, blank=True)
     time = models.IntegerField(null=True, blank=True)
Index: legacy/manager.py
===================================================================
--- legacy/manager.py   (revision 4)
+++ legacy/manager.py   (revision 5)
@@ -1,10 +1,9 @@
 from django.db.models import Manager as BaseManager
 from django.db.models.query import QuerySet as BaseQuerySet
-from django.db.models.sql.where import AND
 
 
 class QuerySet(BaseQuerySet):
-    '''manages composite primary keys.
+    '''manages composite primary keys for the
get(pk='value1,value2,...') operation.
     
     pk='value1,value2' => field1=value1,field2=value2
     
@@ -12,13 +11,21 @@
     field1,field2 are introspected (primary_key or unique_together ?)
     '''
     cmppk_sep = ','
+    cmppk = ()
     
     def filter(self, *args, **kwargs):
         """
         Returns a new QuerySet instance with the args ANDed to the
existing
         set.
         """
-        dbg = args
+        if len(args)==0 and kwargs.has_key('pk'):
+            lvalues = kwargs['pk'].split(self.cmppk_sep)
+            if len(lvalues) != len(self.cmppk):
+                return self._filter_or_exclude(False)
+            dicfilter = {}
+            for i in range(0,len(self.cmppk)):
+                dicfilter[self.cmppk[i]] = lvalues[i]
+            return self._filter_or_exclude(False, **dicfilter)
         return self._filter_or_exclude(False, *args, **kwargs)
 
 
@@ -35,4 +42,8 @@
         """
         qs = QuerySet(self.model)
         qs.cmppk_sep = self.cmppk_sep
+        qs.cmppk = self.model._meta.unique_together[0]
+        self.cmppk = qs.cmppk
+        self.model.cmppk, self.model.cmppk_sep = qs.cmppk,
qs.cmppk_sep
+        
         return qs
Index: legacy/models.py
===================================================================
--- legacy/models.py    (revision 0)
+++ legacy/models.py    (revision 5)
@@ -0,0 +1,27 @@
+from django.db import models
+from manager import Manager
+
+class OIDModel(models.Model):
+    oid = models.IntegerField(primary_key=True, editable=False)
+    class Meta:
+        abstract = True
+
+class CmpPKModel(models.Model):
+    objects = Manager()
+    _default_manager = objects
+    
+    def edit(self):
+        lkey = []
+        for f in self.cmppk:
+            lkey.append(getattr(self, f))
+        key = self.cmppk_sep.join(lkey)
+        return '<a href=%s/>edit</a>' % key
+    edit.allow_tags = True
+    
+    def save(self):
+        ''' FIXME: nothing is saved
+        '''
+        super(CmpPKModel, self).save()
+        
+    class Meta:
+        abstract = True

Property changes on: legacy/models.py
___________________________________________________________________
Name: svn:keywords
   + Id


[subversion:5] base models for oid and composite pk

esimorre 10/03/2008
  • Mysql
  • Glassfish
  • Jruby
  • Rails
  • Nblogo
Terms of Use; Privacy Policy;
© 2010, Oracle Corporation and/or its affiliates
(revision 20120127.ac94057)
 
 
Close
loading
Please Confirm
Close