У меня есть Джанго модель, как это:Resuable члены модели в Джанго
class Something(models.Model):
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')
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'
def __unicode__(self):
return self.title;
class SomethingElse(models.Model):
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 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'
def __unicode__(self):
return self.title;
Я чувствую, что это нарушает СУХОЙ, по понятным причинам. Мой вопрос, могу ли я придерживаться этого где-то еще:
# ...
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'
# ...
А затем включить его в соответствующих классах моделей с одной строки кода? Или может ли photo_thumb динамически добавляться в соответствующие классы? Я пробовал классическое и паразитическое наследование, но я, возможно, не делаю этого правильно ... Я новичок в Django и довольно новичок в python. Любая помощь приветствуется.
, но нет гарантии, что у 'ImageField' есть свойство' photo', есть ли? Это интересное решение, хотя, спасибо. –
@no, вы можете использовать 'getattr' для получения поля, которое вы объявляете, и вам не нужно называть поле' photo' всюду. – satoru
Это добавит метод миниатюр в поле фото, а не к самому классу модели, правильно? Разве метод не должен принадлежать классу модели, чтобы он отображался в списке администраторов? –