from django.db import models book_fields = {'isbn' : 'ISBN', 'id.id' : 'Identifier', 'title' : 'Title', 'subtitle' : 'Subtitle', 'category' : 'Category', 'publisher':'Publisher', 'published_year':'Published year', 'edition' : 'Edition', 'num_pages' : 'Number of pages', 'series' : 'Series', 'description' : 'Description'} class Category(models.Model): id = models.CharField(max_length=255, primary_key=True) name = models.CharField(max_length=255) class BookSeries(models.Model): id = models.CharField(max_length=20, primary_key=True) title = models.CharField(max_length=511) class ReferenceType(models.Model): name = models.CharField(max_length=31) class Reference(models.Model): reference_type = models.ForeignKey(ReferenceType) text = models.CharField(max_length=1023) class Book(models.Model): isbn = models.CharField(max_length=13, primary_key=True) # id = models.CharField(max_length=255) title = models.CharField(max_length=511) subtitle = models.CharField(max_length=511, null=True, blank=True) category = models.ForeignKey(Category, null=True, blank=True) publisher = models.CharField(max_length=255, null=True, blank=True) published_year = models.IntegerField(null=True, blank=True) edition = models.IntegerField(null=True, blank=True) num_pages = models.IntegerField(null=True, blank=True) series = models.ForeignKey(BookSeries, related_name='books', null=True, blank=True) description = models.CharField(max_length=1023, null=True, blank=True) picture = models.ImageField(upload_to='%Y/%m/%d/pictures', null=True, blank=True) thumbnail = models.ImageField(upload_to='%Y/%m/%d/thumbnails', null=True, blank=True) references = models.ManyToManyField(Reference, related_name='books') def full_print(self): for field in book_fields.items(): try: print '%-15s: %50s' % (field[1],eval('self.'+field[0])) except Category.DoesNotExist: print '%-15s: %50s' % (field[1], 'Does not exist') except Id.DoesNotExist: print '%-15s: %50s' % (field[1], '') def getid(self): if self.id: return self.id.id return None def setid(self,newid): if self.id: self.id.delete() newid = Id(book=self,id=newid) newid.save() def get_authors(self): people = self.persons.all() authors = [] for person in people: if person.relation.name == 'Author': authors.append(person.person) return authors def __unicode__(self): return self.title # def print(self): # print '%13s %5s %30s %' # class Meta: # unique_together=(("isbn","id"),) class Id(models.Model): id = models.CharField(max_length=511, primary_key=True) book = models.OneToOneField(Book) class AlternativeTitle(models.Model): book = models.ForeignKey(Book, related_name='alt_titles') alt_title = models.CharField(max_length=511) class Copy(models.Model): book = models.ForeignKey(Book, related_name='copies') number = models.IntegerField() owner = models.CharField(max_length=9) class Person(models.Model): id = models.CharField(max_length=255, primary_key=True) first_name = models.CharField(max_length=255) last_name = models.CharField(max_length=255) references = models.ManyToManyField(Reference, related_name='persons', null=True, blank=True) def __unicode__(self): return self.first_name + u' ' + self.last_name class Relation(models.Model): name = models.CharField(max_length=31, primary_key=True) def __unicode__(self): return self.name class BookPerson(models.Model): book = models.ForeignKey(Book, related_name='persons') person = models.ForeignKey(Person, related_name='books') relation = models.ForeignKey(Relation) def __unicode__(self): return self.person.first_name +u' '+ self.person.last_name+ u' '+ self.relation.name+ u' of '+self.book.title class Placement(models.Model): category = models.ForeignKey(Category) shelf = models.CharField(max_length=10)