2014-01-20 1 views
0

Например, в моем коде:Как вызвать метод save() в классе модели Django, используя имя атрибута attr?

class ClassName(): 
    [...] 
    image_bigger = models.ImageField(upload_to='dir', max_length=500, blank=True, null=True) 
    image_big = models.ImageField(upload_to='dir', max_length=500, blank=True, null=True) 
    image_medium = models.ImageField(upload_to='dir', max_length=500, blank=True, null=True) 
    image_small = models.ImageField(upload_to='dir', max_length=500, blank=True, null=True) 

    def create_resized(self, attr_name, resized_size): 
     [...] 

     if attr_name == "bigger": 
      self.bigger.save(filename, suf, save=False) 
     elif attr_name == "big": 
      self.big.save(filename, suf, save=False) 
     elif attr_name == "medium": 
      self.medium.save(filename, suf, save=False) 
     elif attr_name == "small": 
      self.small.save(filename, suf, save=False) 

Я интересно, если есть что-то вроде GetAttr, чтобы избежать этого некрасиво, если Элиф блок кода ...

+1

если 'attr_name == "маленький"' вы действительно хотите сохранить 'self.medium'? –

+0

ok Nigel Tufnel это была ошибка. Под редакцией! – wildnove

ответ

1

почему бы не использовать GetAttr/hasattr звонки? Вы можете написать примерно следующее:

full_attr_name = 'image_' + attr_name 
if hasattr(self, full_attr_name): 
    getattr(self, full_attr_name).save(filename, suf, save=False) 

Надеюсь, вы поймали эту идею.

+0

Hemm no ... и где is save() метод? – wildnove

+0

жаль отсутствие; верьте getattr (self, full_attr_name) .save (имя файла, suf, save = False) должно работать для вас – Dmitry

+0

ОК отредактирован и решен! – wildnove

Смежные вопросы