yes, yes, no and yes. Abstract models should inherit form models.Model.  
Abstract models should always have a Meta class with abstract=True.  The 
order matters when it comes to shared functionality.  Here's how I would 
code those models you had:

class Taggable(models.Model):
    tag = models.CharField()
    class Meta:
        abstract = True

class Visible(models.Model):
    visible = models.BooleanField()
    class Meta:
        abstract = True

class SomeFullModel(Taggable, Visible):
    otherfield = models.CharField()


If you override a method on all three of those classes (e.g. the save 
method) and in each of them, call super(...).save(), then the order be:
SomeFullModel.save() => Taggable.save() => Visible.save() => 
models.Model.save()

As to how the Meta class is inherited, I'll point you 
to https://docs.djangoproject.com/en/1.4/topics/db/models/#meta-inheritance
 

On Monday, December 31, 2012 8:12:03 AM UTC-5, Mattias Linnap wrote:
>
> Hi all, 
>
> I would like to define multiple abstract base models with small set of 
> fields each. The "real" models inherit from multiple mixins to add the 
> fields. 
>
> For example: 
> class Taggable(?): 
>     tag = models.CharField() 
> class Visible(?): 
>     visible = models.BooleanField() 
> class SomeFullModel(?, Taggable, Visible): 
>     otherfield = models.CharField() 
>
> With this use case: 
> * should the abstract models inherit from models.Model, or be a plain 
> Python class inheriting from object? 
> * should all or any of the abstract models have a class Meta with 
> abstract=True? 
> * should the final real model inherit from models.Model (probably 
> required if all the mixins are plain classes), or inherit from the 
> first mixin that is an abstract model? 
> * does the order of the base classes in SomeFullModel matter? 
>
> Thanks, 
>
> Mattias 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-users/-/9luopcnKn1MJ.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to