【发布时间】:2015-06-26 07:01:54
【问题描述】:
我想为模型动态设置属性。这是我的做法。
# models.py
class pwr(models.Model):
# test info
tester = models.CharField(max_length=10)
test_date = models.DateField(verbose_name='Test Date')
test_summary = models.TextField(verbose_name='Test Summary')
test_duration = models.CharField(max_length=20, verbose_name='Test Duration')
for i in xrange(2):
ii = str(i)
test_result = 'test_result_' + ii
test_com = 'test_comment_' + ii
bug_level = 'bug_level_' + ii
bug_id = 'bug_id_' + ii
bug_sum = 'bug_summary_' + ii
exec (test_result + "= models.CharField(max_length=20, verbose_name='Result', \
choices=(\
('Pass', 'P'), \
('Fail', 'F'), \
('Not Test', 'N/T'), \
('Not Avaliable', 'N/A'), \
('Reference', 'Ref'), \
('Warn', 'W')\
))")
exec (test_com + "= models.CharField(max_length=100, verbose_name='Comment', blank=True)")
exec (bug_level + "= models.CharField(max_length=100, verbose_name='Bug Level', blank=True, \
choices=(('1', '1:Blocker'), \
('2', '2:Critical'), \
('3', '3:Major'), \
('4', '4:Normal'), \
('5', '5:Enhancement')))")
exec (bug_id + "= models.CharField(max_length=10, verbose_name='Bug ID', blank=True)")
exec (bug_sum + "= models.CharField(max_length=100, verbose_name='Bug Summary', blank=True)")
# When I tried to use setattr here, no 'test_attribute' field is added to table pwr in database
setattr(pwr, 'test_attribute', models.CharField(max_length=10, verbose_name='test attr', blank=True))
这看起来真的很难看。你有什么更好的解决方案吗?谢谢!!!
【问题讨论】:
-
您正在寻找
setattr。 -
@BrenBarn 是的,我已经尝试过使用 setattr。但在这种情况下似乎不起作用。在类定义后使用它不起作用。
-
那么请发布一个小的、独立的示例,展示您如何尝试这样做以及它是如何失败的。
-
@BrenBarn 请检查我在代码中的更新。