2011-01-18 8 views
0

私はDjangoでオンラインロールプレイングゲームを構築しています。私は考え、私は一種のdbのnoobのだDjango DBベストプラクティス

class Equipment(models.Model): 
    head = models.ForeignKey("InvSlot",null=True,blank=True,related_name="head") 
    chest = models.ForeignKey("InvSlot",null=True,blank=True,related_name="chest") 
    lwep = models.ForeignKey("InvSlot",null=True,blank=True,related_name="lwep") 
    rwep = models.ForeignKey("InvSlot",null=True,blank=True,related_name="rwep") 
    gloves = models.ForeignKey("InvSlot",null=True,blank=True,related_name="gloves") 
    acc1 = models.ForeignKey("InvSlot",null=True,blank=True,related_name="acc1") 
    acc2 = models.ForeignKey("InvSlot",null=True,blank=True,related_name="acc2") 
    legs = models.ForeignKey("InvSlot",null=True,blank=True,related_name="legs") 
    feet = models.ForeignKey("InvSlot",null=True,blank=True,related_name="feet") 


class Item(models.Model): 
    name = models.CharField(max_length=200, unique=True) 
    desc = models.TextField() 
    image = models.TextField() 
    slot_choices = ((0,"stackable"), 
       (1,"head"), 
       (2,"chest"), 
       (3,"legs"), 
       (4,"feet"), 
       (5,"gloves"), 
       (6,"weapon"), 
       (7,"accessory"), 
       (8,"noequip/stack")) 
    slot = models.IntegerField(max_length=2, choices=slot_choices) 
    twohand = models.BooleanField(default=0) 

    def __unicode__(self): 
     return self.name 

class CharacterClass(models.Model): 
    name = models.CharField(max_length=200) 
    attack = models.IntegerField(max_length=11,default=0) 
    defense = models.IntegerField(max_length=11,default=0) 
    mattack = models.IntegerField(max_length=11,default=0) 
    mdefense = models.IntegerField(max_length=11,default=0) 
    hp = models.IntegerField(max_length=11,default=0) 
    mp = models.IntegerField(max_length=11,default=0) 
    luck = models.IntegerField(max_length=11,default=0) 

    def __unicode__(self): 
     return self.name 

class InvSlot(models.Model): 
# equippable weapons do not stack in inventory. Can also be enchanted 
    character = models.ForeignKey("Character") 
    quantity = models.IntegerField(max_length=2) 
    item = models.ForeignKey("Item") 
    enchant = models.ForeignKey("Buff", blank=True, null=True) 
    equipped = models.BooleanField(default=0) 

    def __unicode__(self): 
     return self.item.name + " x " + str(self.quantity) 

class Character(models.Model): 
    fbid = models.CharField(unique=True, max_length=200) 
    name = models.CharField(unique=True, max_length=200) 
    char_class = models.ForeignKey(CharacterClass) 
    inventory = models.ManyToManyField("InvSlot",null=True,blank=True, related_name="inventory") 
    equipment = models.ForeignKey(Equipment,null=True,blank=True) 
    buffs = models.ManyToManyField("Buff",null=True,blank=True, related_name="buffs") 
    exp = models.IntegerField(max_length=11,default=0) 
    attpoints = models.IntegerField(max_length=11,default=0) 
    money = models.IntegerField(max_length=11,default=0) 
    energy = models.IntegerField(max_length=11,default=0) 
    GENDER_CHOICES = (
    ('M', 'Male'), 
    ('F', 'Female'), 
    ) 
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 
    lastactive = models.DateTimeField(default=datetime.now) 
    level = models.IntegerField(max_length=11,default=0) 
    attack = models.IntegerField(max_length=11,default=0) 
    defense = models.IntegerField(max_length=11,default=0) 
    mattack = models.IntegerField(max_length=11,default=0) 
    mdefense = models.IntegerField(max_length=11,default=0) 
    hp = models.IntegerField(max_length=11,default=0) 
    hpmax = models.IntegerField(max_length=11,default=0) 
    mp = models.IntegerField(max_length=11,default=0) 
    mpmax = models.IntegerField(max_length=11,default=0) 
    luck = models.IntegerField(max_length=11,default=0) 

    def updateActive(self): 
     self.date_modified = datetime.now 
     super(Character, self).save() 

    def __unicode__(self): 
     return self.name 

class CharacterBuff(models.Model): 
    character = models.ForeignKey("Character") 
    buff = models.ForeignKey("Buff") 
    until = models.DateTimeField() 

    def __unicode__(self): 
     return self.buff.name + " on " + self.character.name 

class Buff(models.Model): 
# can be used on both players and items 
    name = models.CharField(unique=True, max_length=200) 
    attack = models.IntegerField(max_length=11) 
    defense = models.IntegerField(max_length=11) 
    mattack = models.IntegerField(max_length=11) 
    mdefense = models.IntegerField(max_length=11) 
    hp = models.IntegerField(max_length=11) 
    # can only be used on players 
    posion = models.BooleanField(default=0) 
    sleep = models.BooleanField(default=0) 
    burned = models.BooleanField(default=0) 

    def __unicode__(self): 
     return self.name 

と:私はここでは、将来的には私の痛みを引き起こすないような方法でモデルを記述するための最良の方法は、私がこれまで持っているものが何であるか疑問に思ってこれを設定するより良い方法があるかどうかについてのいくつかの指針が本当に好きです。

答えて

1

Southのようなデータベース移行ツールを調べるとよいでしょう。これは、アプリケーションがデプロイされ、新しいバージョンでモデルの変更が必要になった後で、データベース更新の苦痛を抑えるのに役立ちます。

+0

私が探していた答えはそれほどではありませんでしたが、私は先週南に遊んでいましたが、それはトリックをすると思います! –

関連する問題