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

Python 如何替换属性名称中的单词,然后添加到该列表中,python,django,attributes,Python,Django,Attributes,我有一个递归关系编辑:将名称“克隆”更改为“修订版”更合适 origin = models.ForeignKey('self', null=True, related_name="%(app_label)s_%(class)s_revision") 我可以将Article类的实例添加到这样的列表中(在shell中) 这样,原始文章将有许多修订添加到该列表中 但是我想拥有用字符串动态更改“article”单词的功能。也许有某种属性名格式,类似于字符串格式 差不多吧 setattr(a, "web

我有一个递归关系编辑:将名称“克隆”更改为“修订版”更合适

origin = models.ForeignKey('self', null=True, related_name="%(app_label)s_%(class)s_revision")
我可以将Article类的实例添加到这样的列表中(在shell中)

这样,原始文章将有许多修订添加到该列表中

但是我想拥有用字符串动态更改“article”单词的功能。也许有某种属性名格式,类似于字符串格式

差不多吧

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

您不必使用
setattr
和分配对象列表,只需使用
getattr
获取o2m字段attr/RelatedManager,然后调用
.add()
向其中添加对象即可

像这样的方法应该会奏效:

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

您不必使用
setattr
和分配对象列表,只需使用
getattr
获取o2m字段attr/RelatedManager,然后调用
.add()
向其中添加对象即可

像这样的方法应该会奏效:

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

你试过了吗?您的
setattr
/
getattr
代码应该可以工作,尽管您使用了
a
两次,所以我不完全理解这是否是一个示例,如果您实际上将
a
附加到其自身,您将不会复制“a”(又称“a副本”),您将创建一个引用。删除也可能是个问题。是的,我做了。它抛出TypeError异常,表示“Article object not iterable”,我可以做
setattr(a,“website{0}\u revision.”format(name),[a])
,但它会用一个项目完全覆盖可能有许多项目的列表。除了将
a
添加到自身之外,上面的代码看起来不错。当您可以使用
x=getattr(a,“website{0}\u revision.”format(name))
获取
m2m
字段属性,然后调用
x.add(a)
时,为什么要使用
setattr
?您的
setattr
/
getattr
代码应该可以工作,尽管您使用了
a
两次,所以我不完全理解这是否是一个示例,如果您实际上将
a
附加到其自身,您将不会复制“a”(又称“a副本”),您将创建一个引用。删除也可能是个问题。是的,我做了。它抛出TypeError异常,表示“Article object not iterable”,我可以做
setattr(a,“website{0}\u revision.”format(name),[a])
,但它会用一个项目完全覆盖可能有许多项目的列表。除了将
a
添加到自身之外,上面的代码看起来不错。当你可以使用
x=getattr(a,“website{0}\u revision.”format(name))
来获取
m2m
字段属性,然后调用
x.add(a)
?我不确定它是m2m字段,可能是o2m(ForeignKey)?我不确定它是m2m字段,可能是o2m(ForeignKey)?