Django:如何将Model属性用作字符串?

时间:2011-11-26 21:13:57

标签: django django-models

我有这样的模型:

class MyModel(models.Model):
    var1 = models.CharField(max_length=10)
    var2 = models.CharField(max_length=10)
    var3 = models.CharField(max_length=10)
    var4 = models.CharField(max_length=10)
    ...
    var100 = models.CharField(max_length=10)

我必须以类似的方式处理所有这些,例如:

string = var1 if var1 else ''
string += var2 if var2 else ''
string += var3 if var3 else ''
string += var4 if var4 else ''
...
string += var100 if var100 else ''

这样我会写出100行代码......

但也许有一些方法可以在for语句中处理所有这些,例如:

string = ''
for i in range(1,101):
    string += var%s % i if var%s % i else '': #I know this is not right, but idea is understood

所以我只会编写3行代码。

Django可以吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

#assuming this is on the Model
def get_values(self):
    ret = []
    for i in range(1, 101):
        field_name = "var%d" % i
        value = self._meta.get_field(field_name).value_from_object(self)
        if value:
            ret.append(value)

    return ''.join(ret)

答案 1 :(得分:0)

使用getattr访问代码中的属性

>>> class MyModel():
...    var1 = 'hello'
...    var2 = 'there'
...    var3 = 'simple'
...    var4 = 'example'
...
>>> foo = MyModel()
>>> getattr(foo,'var1')
'hello'
>>> number = 3
>>> getattr(foo,'var%s'%number)
'simple'
>>> for x in range(1,5):
...   print getattr(foo,'var%s' % x)
...
hello
there
simple
example