Changeset 117

Show
Ignore:
Timestamp:
11/17/09 00:14:00 (10 months ago)
Author:
rsbaskin
Message:

Staff refactor. I do all the hard models work and now Max just has to write the easy migration script - typical.

Location:
branches/nando/courant/core/staff
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/nando/courant/core/staff/admin.py

    r71 r117  
    66class StafferAdmin(admin.ModelAdmin): 
    77 
    8     list_display = ['last_name', 'first_name', 'position', 'user', 'public_profile'] 
     8    list_display = ['last_name', 'first_name', 'user', 'public_profile'] 
    99    list_filter = ['public_profile'] 
    1010    search_fields = ['user__username', 'user__first_name', 'user__last_name', 'first_name', 'last_name'] 
    1111admin.site.register(Staffer, StafferAdmin) 
     12 
     13admin.site.register(StaffPositionTitle) 
     14admin.site.register(StaffDepartment) 
     15admin.site.register(StaffPosition) 
  • branches/nando/courant/core/staff/models.py

    r71 r117  
    44from courant.core.gettag import gettag 
    55 
     6from datetime import date 
     7 
     8class StaffPositionTitle(models.Model): 
     9 
     10        name = models.CharField(max_length=255) 
     11         
     12        def __unicode__(self): 
     13                return self.name 
     14         
     15class StaffDepartment(models.Model): 
     16 
     17        name = models.CharField(max_length=255) 
     18         
     19        def __unicode__(self): 
     20                return self.name 
     21 
     22class StaffPositionManager(models.Manager): 
     23        use_for_related_fields = True 
     24 
     25        def active(self): 
     26                return self.get_query_set().filter(start_on__lte=date.today(), end_on__gte=date.today()) 
     27 
     28class StaffPosition(models.Model): 
     29 
     30        name = models.CharField(max_length=255) 
     31         
     32        title = models.ForeignKey(StaffPositionTitle) 
     33        position = models.ForeignKey(StaffDepartment) 
     34         
     35        start_on = models.DateField() 
     36        end_on = models.DateField() 
     37         
     38        objects = StaffPositionManager() 
     39         
     40        def __unicode__(self): 
     41                return self.name 
     42 
    643class Staffer(models.Model): 
    7     """ 
    8     Represents a staff member in the news organization, or anyone who publishes 
    9     content on the web site. 
    10     """ 
    11     user = models.OneToOneField(User, blank=True, null=True, 
    12                                 help_text="Optional, but recommended.") 
    13     slug = models.SlugField() 
    14     position = models.CharField(max_length=255) 
     44        """ 
     45        Represents a staff member in the news organization, or anyone who publishes 
     46        content on the web site. 
     47        """ 
     48        slug = models.SlugField() 
     49         
     50        user = models.OneToOneField(User, blank=True, null=True, 
     51                                                                help_text="Optional, but recommended.") 
     52        positions = models.ManyToManyField(StaffPosition) 
    1553 
    16     # denormalization if a user is linked to this staffer, or else holds the 
    17     # staffer's name if they do not have a user account 
    18     first_name = models.CharField(max_length=30, blank=True) 
    19     last_name = models.CharField(max_length=30, blank=True) 
    20      
    21     public_profile = models.BooleanField(default=True) 
     54        # denormalization if a user is linked to this staffer, or else holds the 
     55        # staffer's name if they do not have a user account 
     56        first_name = models.CharField(max_length=30, blank=True) 
     57        last_name = models.CharField(max_length=30, blank=True) 
     58         
     59        bio = models.TextField() 
     60        public_profile = models.BooleanField(default=True) 
    2261 
    23     class Meta: 
    24         ordering = ['user'] 
    25         unique_together = ['first_name', 'last_name'] 
     62        class Meta: 
     63                ordering = ['user'] 
     64                unique_together = ['first_name', 'last_name'] 
    2665 
    27     def __unicode__(self): 
    28         return "%s %s" % (self.first_name, self.last_name) 
     66        def __unicode__(self): 
     67                return "%s %s" % (self.first_name, self.last_name) 
    2968 
    30     def save(self): 
    31         if self.user: #denormalization 
    32             self.first_name = self.user.first_name 
    33             self.last_name = self.user.last_name 
    34         super(Staffer, self).save() 
     69        def save(self): 
     70                if self.user: #denormalization 
     71                        self.first_name = self.user.first_name 
     72                        self.last_name = self.user.last_name 
     73                super(Staffer, self).save() 
    3574 
    36     @models.permalink 
    37     def get_absolute_url(self): 
    38         return('staffer_detailed', (), {'slug': self.slug}) 
     75        @models.permalink 
     76        def get_absolute_url(self): 
     77                return('staffer_detailed', (), {'slug': self.slug}) 
    3978gettag.register(Staffer) 
    4079 
    4180class ContentByline(models.Model): 
    42     """ 
    43     Abstract base class that handles associating staffers with other types 
    44     of content. 
    45     """ 
    46     staffer = models.ForeignKey(Staffer) 
    47     position = models.CharField(max_length=100) 
    48     order = models.PositiveSmallIntegerField() 
     81        """ 
     82        Abstract base class that handles associating staffers with other types 
     83        of content. 
     84        """ 
     85        staffer = models.ForeignKey(Staffer) 
     86        position = models.ForeignKey(StaffPosition) 
     87        order = models.PositiveSmallIntegerField() 
    4988 
    50     class Meta: 
    51         abstract = True 
     89        class Meta: 
     90                abstract = True 
    5291 
    53     def __unicode__(self): 
    54         return "%s - %s" % (self.staffer, self.position) 
    55  
    56     def save(self): 
    57         # denormaliaze position, since a staffer's position may change year-to-year 
    58         # but the position field should only reflect their position at time of 
    59         # publication 
    60         self.position = self.staffer.position 
    61         super(ContentByline, self).save() 
     92        def __unicode__(self): 
     93                return "%s - %s" % (self.staffer, self.position)