Source code for cv.models.achievements
from django.core.exceptions import ValidationError
from django.db import models
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from .base import DisplayableModel
from .managers import PrimaryPositionManager
[docs]class Award(DisplayableModel):
"""Award or honor earned."""
name = models.CharField(max_length=200)
organization = models.CharField(
_('Granting institution or organization'), max_length=200)
date = models.DateField()
description = models.TextField(blank=True)
class Meta:
ordering = ['-date']
get_latest_by = 'date'
def __str__(self):
return self.name
def get_absolute_url(self):
return '{}#award-{}'.format(reverse('cv:cv_list'), self.pk)
objects = models.Manager()
[docs]class Degree(DisplayableModel):
"""Degree earned.
Degrees are sorted in reverse order by ``end_date``.
"""
degree = models.CharField(max_length=10)
major = models.CharField(max_length=100, null=True, blank=True)
date_earned = models.DateField(_('Date Earned'))
institution = models.CharField(max_length=100)
city = models.CharField(max_length=100, blank=True)
state = models.CharField(
_('State or Province'), max_length=100, blank=True)
country = models.CharField(max_length=100, blank=True)
honors = models.CharField(max_length=100, null=True, blank=True)
class Meta:
ordering = ('-date_earned',)
get_latest_by = 'date_earned'
def __str__(self):
return self.degree
def get_absolute_url(self):
return '{}#degree-{}'.format(reverse('cv:cv_list'), self.pk)
objects = models.Manager()
[docs]class Position(DisplayableModel):
"""Position of employment or research experience.
Positions are sorted by ``end_date``.
In addition to default managers of ``DisplayableModel``, ``Position``
also has a ``primarypositions`` manager that only returns positions
for which ``primary_position==True``. This manager can be used, for
example, to list positions in the heading of CVs.
"""
title = models.CharField(max_length=100)
start_date = models.DateField(null=False)
end_date = models.DateField(null=True, blank=True,
help_text=_('If current, set date to future (by default positions '
'will be ordered by end date')
)
project = models.CharField(max_length=100, blank=True)
department = models.CharField(max_length=100, blank=True)
institution = models.CharField(max_length=100)
current_position = models.BooleanField(
_('Current position?'), default=False,
help_text=_('Are you currently in this position?'))
primary_position = models.BooleanField(
_('Primary position?'), default=False,
help_text=_('Should this position be displayed as the main position '
'(e.g., on heading of CV)?')
)
[docs] def clean(self):
"""Ensure start date is before end date."""
if self.start_date and self.end_date:
if self.start_date > self.end_date:
raise ValidationError(
{'end_date': _('End date cannot be before start date')}
)
def get_absolute_url(self):
return '{}#position-{}'.format(reverse('cv:cv_list'), self.pk)
class Meta:
ordering = ['-end_date', '-start_date']
get_latest_by = 'end_date'
def __str__(self):
return '%s' % (self.title)
objects = models.Manager()
primary_positions = PrimaryPositionManager()