Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from django.db import models
- from django.contrib.auth.models import User
- from django.db.models.signals import post_save
- """For now, all the models are just shoved into one file.
- Will seperate eventually."""
- max_name_length = 25
- max_location_length = 20
- max_title_length = 30
- max_post_length = 65000
- class Player(models.Model):
- #name ia covered by the django.auth User object
- user = models.OneToOneField(User)
- friends = models.ManyToManyField("self", symmetrical=True)
- post_count = models.PositiveIntegerField(default=0)
- #Date joined also covered by user
- #date_joined = models.DateField()
- location = models.CharField(max_length=max_location_length)
- #Again, subsumed by user
- #groups = models.ManyToManyField("Group", related_name="groups", db_table=u"PLAYERS_TO_GROUPS")
- #size?
- #size = models.BigIntegerField()
- #Implemented by django.auth User
- #permissions = models.ForeignKey("Permission_Group")
- def create_user_profile(sender, instance, created, **kwargs):
- if created:
- Player.objects.create(user=instance)
- post_save.connect(create_user_profile, sender=User)
- class ManyToManyField_NoSyncdb(models.ManyToManyField):
- def __init__(self, *args, **kwargs):
- super(ManyToManyField_NoSyncdb, self).__init__(*args, **kwargs)
- self.creates_table = False
- class Group(models.Model):
- name = models.CharField(max_length=max_name_length)
- admins = models.ManyToManyField(Player, symmetrical=True)
- members = ManyToManyField_NoSyncdb(Player, related_name="members", db_table="PLAYERS_TO_GROUPS")
- description = models.TextField(max_length=max_post_length)
- class Section(models.Model):
- title = models.CharField(max_length=max_title_length)
- #Could have used inheritance.
- #Decided not to so all data is in one table. (Only one field is
- #shared anyway) Removed here because lots of forum data is expected
- class Subsection(models.Model):
- title = models.CharField(max_length=max_title_length)
- parent = models.ForeignKey(Section, related_name="children")
- class Thread(models.Model):
- description = models.CharField(max_length=max_title_length)
- author = models.ForeignKey(Player, related_name="threads")
- post_date = models.DateField()
- parent = models.ForeignKey(Subsection, related_name="threads")
- closed = models.BooleanField()
- #Message-based classes
- class Message(models.Model):
- title = models.CharField(max_length=max_title_length)
- author = models.ForeignKey(Player, related_name="messages")
- post_date = models.DateField()
- text = models.TextField(max_length=max_post_length)
- class Post(Message):
- flagged = models.BooleanField()
- class Pm(Message):
- read = models.BooleanField()
- starred = models.BooleanField()
- #Douibly implemented to avoid generic relation ugliness
- class Friend_Request(models.Model):
- author = models.ForeignKey(Player, related_name="sent_friend_requests")
- recipient = models.ForeignKey(Player, related_name="friend_requests")
- #None represents not-yet-answered
- #False transforms this into a block
- accepted = models.NullBooleanField()
- #Douibly implemented to avoid generic relation ugliness
- class Join_Group_Request(models.Model):
- author = models.ForeignKey(Player, related_name="sent_group_requests")
- recipient = models.ForeignKey(Group, related_name="membership_requests")
- #None represents not-yet-answered
- #False transforms this into a block
- accepted = models.NullBooleanField()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement