2013-07-09 42 views
2

有沒有一種方法可以像這樣構建django模型層次結構?django模型的Mixin不透明

class LikableObjectMixin(models.Model): 
    # mixin for all likable objects: posts, photos, etc 
    likers = models.ManyToManyField(Account) 

    class Meta: 
     abstract = True 

    def save(): 
     super(LikableObjectMixin, self).save() 


class Post(LikableObjectMixin, models.Model): 
    message = models.TextField(_('Post')) 
    author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='posts', blank=True, null=True) 
    created = models.DateTimeField(auto_now_add=True) 

南方可以使用這種繼承嗎?這是建立模型層次結構的適當方式嗎?

Django = 1.5.1

+0

這足以'類崗位(LikableObjectMixin)'因爲其它類已經從'models.Model' – matino

+0

我知道繼承,但是這只是一個例子,我想用這個mixin的另一個模型,其可以從其他模型繼承 – kharandziuk

回答

1

是的,它非常好。 South將爲您的混音中繼承的所有模型創建適當的m2m關係。你甚至不需要明確寫出save方法。所以:

class LikableObjectMixin(models.Model): 
    likers = models.ManyToManyField(Account) 

    class Meta: 
     abstract = True 


class Post(LikableObjectMixin): 
    message = models.TextField(_('Post'))