使用托管属性实现DRY原则

时间:2015-12-17 07:08:51

标签: python django properties kwargs

我的models.py中有以下代码可以正常工作。

def get_city_name(self):
    return self.city.name

def get_state_name(self):
    return self.state.name

class AuthorMeta(Page):
    author=models.OneToOneField(User)
    city = models.ForeignKey('Cities', null=True, blank=True, on_delete=models.SET_NULL, related_name='related_author')
    state = models.ForeignKey('States', null=True, blank=True, on_delete=models.SET_NULL, related_name='related_author')
    city_name = property(get_city_name)
    state_name = property(get_state_name)

但我希望通过单一功能实现同样的目标。 我基本上遇到了传递参数的问题。即使我尝试以下操作,它也不起作用:

def get_name(self, attr):
    return getattr(self, attr)

class AuthorMeta(Page):
    ##### city, state, etc. defined here #####
    city_name = property(get_name('city'))
    state_name = property(get_name('state'))

导致不同的错误get_name() takes exactly 2 arguments (1 given)

0 个答案:

没有答案