如何使用attr字符串名称在Django模型类中调用方法save()?

时间:2014-01-20 10:12:17

标签: python django

例如在我的代码中:

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这样的东西可以避免那些丑陋的elif代码块......

2 个答案:

答案 0 :(得分: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)

希望,你已经抓住了这个想法。

答案 1 :(得分:0)

如果你有不同大小的图像,那么我认为使用sorl-thumbnail会是一种更好的方法。链接附件。

http://sorl-thumbnail.readthedocs.org/en/latest/examples.html#model-examples