from django.db import models from django.contrib.auth.models import User from tagging.fields import TagField from django.core.paginator import Paginator, InvalidPage, EmptyPage from app.models import ItfModel GENRES = ( ('Fiction', 'Fiction'), ('Comedy', 'Comedy'), ) LICENSE_TYPE_CHOICES = ( ('adapt', 'Adaptation License'), ('perform', 'Performance License'), ) LANGUAGE_CHOICES = ( ('en', 'English'), ('hi', 'Hindi'), ('ma', 'Marathi'), ('be', 'Bengali'), ) class Script(ItfModel): user = models.ForeignKey(User) title = models.CharField(max_length=255) synopsis = models.TextField(blank=True) no_characters = models.IntegerField(blank=True, null=True, help_text="Approximate number of characters") no_of_women = models.IntegerField(blank=True, null=True, help_text="How many characters are women?") tags = TagField(blank=True) production_notes = models.TextField(blank=True, help_text="Additional production notes") language = models.CharField(max_length=32, choices=LANGUAGE_CHOICES) approx_duration = models.IntegerField(blank=True, null=True, help_text="Approximate time, in minutes") is_partial = models.BooleanField(default=False, help_text="Check this if you are uploading only a partial script") author = models.CharField(max_length=255) contact = models.EmailField() script = models.FileField(null=True, upload_to='upload/scripts/') license_adapt = models.ForeignKey("License", related_name="adaptation_license", help_text="License for adaptation rights") license_perform = models.ForeignKey("License", related_name="performance_license", help_text="License for performance rights") fts_fields = ['title', 'synopsis', 'author'] fk_fields = ['license_adapt', 'license_perform'] add_form = 'ScriptForm' #Meta added = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) def __unicode__(self): return self.title def list_dict(self): return { 'id': self.id, 'title': self.title, } def info_dict(self): return { 'title': self.title, 'synopsis': self.synopsis, 'no_characters': self.no_characters, 'no_of_women': self.no_of_women, 'production_notes': self.production_notes, 'language': self.language, 'approx_duration': self.approx_duration, 'is_partial': self.is_partial, 'author': self.author, 'contact': self.contact, 'script_file': self.script.url, 'license_adapt': self.license_adapt, 'license_perform': self.license_perform } ''' @classmethod def get_list(kls, data): options = { 'page_no': 1, 'list_size': 8 } options.update(data) l = [] page_no = options['page_no'] list_size = options['list_size'] qset = kls.objects.all() paginator = Paginator(qset, list_size) try: results = paginator.page(page_no) except (EmptyPage, InvalidPage): results = paginator.page(paginator.num_pages) for r in results.object_list: l.append({ 'id': r.id, 'title': r.title }) return l ''' class License(ItfModel): letter = models.CharField(max_length=2) name = models.CharField(max_length=255) short_description = models.TextField() readable_file = models.FileField(upload_to='upload/licenses/short/') legal_file = models.FileField(upload_to='upload/licenses/legal/') typ = models.CharField(choices=LICENSE_TYPE_CHOICES, max_length=32) title_field = 'name' def __unicode__(self): return self.typ + ": " + self.letter + ": " + self.name def list_dict(self): return { 'id': self.id, 'title': self.name } def info_dict(self): return { 'id': self.id, 'letter': self.letter, 'short_description': self.short_description, 'readable_file': self.readable_file.url, 'legal_file': self.legal_file.url, 'typ': self.typ, 'reviews': Review.objects.filter(script=self) } class Review(models.Model): script = models.ForeignKey(Script) reviewer = models.CharField(max_length=255) reviewer_email = models.EmailField() text = models.TextField() #this is to record who downloaded what play, etc. class Downloader(models.Model): script = models.ForeignKey(Script) email = models.EmailField() ##Make sure to add Comments to scripts