假设我有两个团队,"red"
并且"black"
. 假设我有一Story
堂课,它以两种截然不同的方式呈现相似的信息,具体取决于您的团队:
class Story(models.Model):
red_title = models.CharField()
black_title = models.CharField()
red_prologue = models.TextField()
black_prologue = models.TextField()
# ... and so on ...
def get_field(self, genericName, team):
"""Return the field with suffix genericName belonging to the given team.
>>>self.get_field("prologue", "red") is self.red_prologue
True
>>>self.get_field("title", "black") is self.black_title
True
"""
assert(team in ["red", "black"])
specificName = "{}_{}".format(team, genericName)
return self.__dict__[specificName]
我对 getter 函数很满意,但我觉得我应该能够重构最初创建字段的代码。我想要一个看起来像这样的函数:
def make_fields(self, genericName, fieldType, **kwargs):
"""Create two fields with suffix genericName.
One will be 'red_{genericName}' and one will be 'black_{genericName}'.
"""
for team in ["red", "black"]:
specificName = "{}_{}".format(team, genericName)
self.__dict__[specificName] = fieldType(**kwargs)
但是self
和__dict__
在第一次定义类时毫无意义,我认为 Django 要求数据库字段是类变量而不是实例变量。
那么......有什么方法可以make_fields
在 Django 中创建这个函数,还是我不走运?