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)?