[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 |





