changeset 284:4f5a9c142185

tracker: bugfix models
author Sylvain Beucler <beuc@beuc.net>
date Sat, 14 Aug 2010 12:21:46 +0200
parents 4006e8d335f6
children 9c7f3b8730c3
files savane/tracker/models.py settings_default.py
diffstat 2 files changed, 30 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/savane/tracker/models.py
+++ b/savane/tracker/models.py
@@ -18,6 +18,8 @@
 
 from django.db import models
 from django.utils.translation import ugettext, ugettext_lazy as _
+import django.contrib.auth.models as auth_models
+import datetime
 
 # TODO: default '100' (aka 'nobody' or 'None', depending on
 # fields) -> change to NULL?
@@ -28,13 +30,13 @@
 RESTRICTION_CHOICES = (('2', _('anonymous')),
                        ('3', _('logged-in user')),
                        ('5', _('project member')),)
-NEW_ITEM_POSTING_RESTRICTION_CHOICES = PERMISSION_CHOICES + (('', _('group type default')),)
-COMMENT_POSTING_RESTRICTION_CHOICES = PERMISSION_CHOICES + (('', _('same as new item')),)
 PERMISSION_CHOICES = (('', _('group type default')),
                       ('9', _('none')),
                       ('1', _('technician')),
                       ('3', _('manager')),
                       ('2', _('technician & manager')),)
+NEW_ITEM_POSTING_RESTRICTION_CHOICES = PERMISSION_CHOICES + (('', _('group type default')),)
+COMMENT_POSTING_RESTRICTION_CHOICES = PERMISSION_CHOICES + (('', _('same as new item')),)
 
 
 NOTIFICATION_ROLES = (
@@ -79,7 +81,7 @@
                     ('support', 'support'),
                     ('tasks', 'tasks'),
                     )
-    name = models.CharField(max_length=7, choices=NAME_CHOICES)
+    name = models.CharField(max_length=7, choices=NAME_CHOICES, primary_key=True)
 
 class GroupTypeConfiguration(models.Model):
     """
@@ -94,30 +96,30 @@
     comment_posting_restriction = models.CharField(max_length=1,
                                                    choices=COMMENT_POSTING_RESTRICTION_CHOICES,
                                                    blank=True)
-    default_member_permission = models.CharField(max_length=1, choices=PERMISSION, blank=True)
+    default_member_permission = models.CharField(max_length=1, choices=PERMISSION_CHOICES, blank=True)
 
 class GroupConfiguration(models.Model):
     """
     Previously in table "groups_default_permissions"
     """
     tracker = models.ForeignKey('Tracker')
-    group = models.ForeignKey('auth.Group')
+    group = models.ForeignKey(auth_models.Group)
     new_item_restriction = models.CharField(max_length=1,
                                             choices=NEW_ITEM_POSTING_RESTRICTION_CHOICES,
                                             blank=True)
     comment_restriction = models.CharField(max_length=1,
                                            choices=COMMENT_POSTING_RESTRICTION_CHOICES,
                                            blank=True)
-    default_member_permission = models.CharField(max_length=1, choices=PERMISSION, blank=True)
+    default_member_permission = models.CharField(max_length=1, choices=PERMISSION_CHOICES, blank=True)
 
 class MemberPermission(models.Model):
     """
     Previously in table "user_group"
     """
     tracker = models.ForeignKey('Tracker')
-    group = models.ForeignKey('auth.Group')
-    user = models.ForeignKey('auth.Group')
-    permission = models.CharField(max_length=1, choices=Tracker.PERMISSION, blank=True)
+    group = models.ForeignKey(auth_models.Group)
+    user = models.ForeignKey(auth_models.User)
+    permission = models.CharField(max_length=1, choices=PERMISSION_CHOICES, blank=True)
 
 #class SquadPermission(models.Model): pass
 
@@ -181,7 +183,7 @@
                                ('1', _('optional (empty values are accepted)')),
                                ('3', _('mandatory')),)
     bug_field = models.ForeignKey('Field')
-    group = models.ForeignKey('auth.Group')
+    group = models.ForeignKey(auth_models.Group)
     use_it = models.BooleanField(_("used"))
     show_on_add = models.CharField(max_length=1, choices=SHOW_ON_ADD_CHOICES,
                                    default='0', blank=True, null=True)
@@ -190,7 +192,7 @@
       # show_on_add_anonymous = models.BooleanField("show to anonymous users")
     show_on_add_members = models.BooleanField(_("show to project members"))
     place = models.IntegerField() # new:rank
-    transition_default_auth = models.CharField(max_lenth=1, choices=TRANSITION_DEFAULT_AUTH, default='A')
+    transition_default_auth = models.CharField(max_length=1, choices=TRANSITION_DEFAULT_AUTH_CHOICES, default='A')
 
     custom_empty_ok = models.CharField(max_length=1, choices=CUSTOM_EMPTY_OK_CHOICES,
                                        default='0', blank=True, null=True)
@@ -219,7 +221,7 @@
                       ('H', _('hidden')), # mask previously-active or system fields
                       ('P', _('permanent')),) # status cannot be modified, always visible
     bug_field = models.ForeignKey('Field')
-    group = models.ForeignKey('auth.Group') # =100 for system-wide values
+    group = models.ForeignKey(auth_models.Group) # =100 for system-wide values
     value_id = models.IntegerField(db_index=True) # group_specific value identifier
       # It's not a duplicate of 'id', as it's the value referenced by
       # Item fields, and the configuration of that value can be
@@ -259,22 +261,22 @@
     # Per-tracker public item identifier.  Reason is historical:
     # trackers were stored in different tables, each with its own
     # auto_increment field:
-    bugs_id    = models.ForeignKey(BugsPublicId,    blank=True, null=True)
-    task_id    = models.ForeignKey(TaskPublicId,    blank=True, null=True)
-    support_id = models.ForeignKey(SupportPublicId, blank=True, null=True)
-    patch_id   = models.ForeignKey(PatchPublicId,   blank=True, null=True)
+    bugs_id    = models.OneToOneField(BugsPublicId,    blank=True, null=True)
+    task_id    = models.OneToOneField(TaskPublicId,    blank=True, null=True)
+    support_id = models.OneToOneField(SupportPublicId, blank=True, null=True)
+    patch_id   = models.OneToOneField(PatchPublicId,   blank=True, null=True)
 
     # Non-fields values
-    group = models.ForeignKey('auth.Group')
+    group = models.ForeignKey(auth_models.Group)
     spamscore = models.IntegerField(default=0)
-    ip = IPAddressField(blank=True, null=True)
-    submitted_by = models.ForeignKey('auth.User', default=100)
+    ip = models.IPAddressField(blank=True, null=True)
+    submitted_by = models.ForeignKey(auth_models.User, default=100)
     date = models.DateTimeField(default=datetime.date.today)
     close_date = models.DateTimeField(blank=True, null=True)
 
     # Forward dependencies
-    dependencies = ManyToManyField('self', symmetrical=False,
-                                   related_name='reverse_dependencies')
+    dependencies = models.ManyToManyField('self', symmetrical=False,
+                                          related_name='reverse_dependencies')
 
     ##
     # Field values
@@ -388,9 +390,9 @@
        # But as it's a history field, adding constraints might be just bad.
     old_value= models.TextField(blank=True, null=True)
     new_value= models.TextField()
-    mod_by = models.ForeignKey('auth.User')
+    mod_by = models.ForeignKey(auth_models.User)
     date = models.DateTimeField(default=datetime.date.today)
-    ip = IPAddressField(blank=True, null=True)
+    ip = models.IPAddressField(blank=True, null=True)
 
     # Specific (bad!) field for 'details'
     # I guess 'details' could be stored separately.
@@ -408,7 +410,7 @@
     """
     item = models.ForeignKey('Item')
     email = models.EmailField(max_length=255)
-    added_by = models.ForeignKey('auth.User')
+    added_by = models.ForeignKey(auth_models.User)
     comment = models.TextField()
     date = models.DateTimeField(default=datetime.date.today)
 
@@ -420,7 +422,7 @@
     One file attached to an item.
     """
     item = models.ForeignKey('Item')
-    submitted_by = models.ForeignKey('auth.User')
+    submitted_by = models.ForeignKey(auth_models.User)
     date = models.DateTimeField(default=datetime.date.today)
     description = models.TextField()
     filename = models.TextField()
@@ -435,8 +437,8 @@
     Score is summed in ItemHistory.spamscore.
     """
     score = models.IntegerField(default=1)
-    affected_user = models.ForeignKey('auth.User')
-    reporter_user = models.ForeignKey('auth.User')
+    affected_user = models.ForeignKey(auth_models.User, related_name='itemspamscore_affected_set')
+    reporter_user = models.ForeignKey(auth_models.User, related_name='itemspamscore_reported_set')
     item = models.ForeignKey('Item')
     comment_id = models.ForeignKey('ItemHistory', null=True)
 
--- a/settings_default.py
+++ b/settings_default.py
@@ -111,6 +111,7 @@
     'savane.svmain',
     'savane.my',
     'savane.svpeople',
+    'savane.tracker',
 )