如何替换属性名称中的单词,然后添加到该列表

时间:2016-03-19 05:35:00

标签: python django attributes

我有一个递归的关系。 修改:将名称“clone”更改为“revision”更合适。

origin = models.ForeignKey('self', null=True, related_name="%(app_label)s_%(class)s_revision")

我可以将Article类的实例添加到这样的列表中(在shell中)。

a.website_article_revision.add(a)

这样原始文章就会在该列表中添加许多修订。

但我希望能够使用字符串动态更改“文章”字。也许存在某种属性名称格式,类似于字符串格式化?

这样的事情。

setattr(a, "website_{0}_revision".format(name), a)
x = getattr(a, "website_{0}_revision".format(name))

1 个答案:

答案 0 :(得分:0)

您可以使用setattr来获取o2m字段attr / RelatedManager,然后调用getattr来向其添加对象,而不是使用.add()并分配对象列表。

这样的事情应该有效:

x = getattr(a, "website_{0}_revision".format(name))
x.add(a)