Changeset 117
- Timestamp:
- 11/17/09 00:14:00 (10 months ago)
- Location:
- branches/nando/courant/core/staff
- Files:
-
- 2 modified
Legend:
- Unmodified
- Added
- Removed
-
branches/nando/courant/core/staff/admin.py
r71 r117 6 6 class StafferAdmin(admin.ModelAdmin): 7 7 8 list_display = ['last_name', 'first_name', ' position', 'user', 'public_profile']8 list_display = ['last_name', 'first_name', 'user', 'public_profile'] 9 9 list_filter = ['public_profile'] 10 10 search_fields = ['user__username', 'user__first_name', 'user__last_name', 'first_name', 'last_name'] 11 11 admin.site.register(Staffer, StafferAdmin) 12 13 admin.site.register(StaffPositionTitle) 14 admin.site.register(StaffDepartment) 15 admin.site.register(StaffPosition) -
branches/nando/courant/core/staff/models.py
r71 r117 4 4 from courant.core.gettag import gettag 5 5 6 from datetime import date 7 8 class StaffPositionTitle(models.Model): 9 10 name = models.CharField(max_length=255) 11 12 def __unicode__(self): 13 return self.name 14 15 class StaffDepartment(models.Model): 16 17 name = models.CharField(max_length=255) 18 19 def __unicode__(self): 20 return self.name 21 22 class 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 28 class 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 6 43 class 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) 15 53 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) 22 61 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'] 26 65 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) 29 68 30 def save(self):31 if self.user: #denormalization32 self.first_name = self.user.first_name33 self.last_name = self.user.last_name34 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() 35 74 36 @models.permalink37 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}) 39 78 gettag.register(Staffer) 40 79 41 80 class ContentByline(models.Model): 42 """43 Abstract base class that handles associating staffers with other types44 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() 49 88 50 class Meta:51 abstract = True89 class Meta: 90 abstract = True 52 91 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)