Я согласен с @Gintautas.Общее правило заключается в создании абстрактного класса модели, если вам нужно повторно использовать поля модели и мета-опции;используйте простой класс, если вам нужно только повторно использовать другие свойства и методы.
В вашем случае я бы использовал абстрактный класс (из-за поля модели photo
):
class PhotoModels(models.Model):
photo = models.ImageField(upload_to=u'something')
def photo_thumb(self):
if self.photo:
return u'<img src="%s" />' % (settings.MEDIA_URL +
'/thumbs/?h=64&w=80&c=50x0&p=' + self.photo.name)
else:
return u'(no photo)'
photo_thumb.short_description = u'Photo'
photo_thumb.allow_tags = True
photo_thumb.admin_order_field = 'photo'
class meta:
abstract = True
class Something(PhotoModels):
title = models.CharField(max_length=200, default=u'')
text = models.CharField(max_length=250, default=u'', blank=True)
class SomethingElse(PhotoModels):
name = models.CharField(max_length=200, default=u'')
foo = models.CharField(max_length=250, default=u'', blank=True)
photo.upload_to = u'something_else'
def __unicode__(self):
return self.title;
... хотя это также было бы законно:
class PhotoModels:
def photo_thumb(self):
if self.photo:
return u'<img src="%s" />' % (settings.MEDIA_URL +
'/thumbs/?h=64&w=80&c=50x0&p=' + self.photo.name)
else:
return u'(no photo)'
photo_thumb.short_description = u'Photo'
photo_thumb.allow_tags = True
photo_thumb.admin_order_field = 'photo'
class Something(models.Model, PhotoModels):
title = models.CharField(max_length=200, default=u'')
text = models.CharField(max_length=250, default=u'', blank=True)
photo = models.ImageField(upload_to=u'something')
class SomethingElse(models.Model, PhotoModels):
name = models.CharField(max_length=200, default=u'')
foo = models.CharField(max_length=250, default=u'', blank=True)
photo = models.ImageField(upload_to=u'something_else')
def __unicode__(self):
return self.title;