首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过索引编写模型的变量

如何通过索引编写模型的变量
EN

Stack Overflow用户
提问于 2021-07-27 21:47:23
回答 1查看 26关注 0票数 1

假设一个模型

代码语言:javascript
运行
复制
class MyModel(models.Model):
    id_pk = models.AutoField(primary_key=True)
    prop_a = models.CharField(max_length=200, blank=True, null=True)
    prop_b = models.CharField(max_length=200, blank=True, null=True)
    prop_c = models.CharField(max_length=200, blank=True, null=True)

我想访问每个索引(整数)的变量(=column),如下所示:

代码语言:javascript
运行
复制
my_model = MyModel()
my_model[2] = 'my text'

我知道可以通过使用变量名“静态地”做到这一点:

代码语言:javascript
运行
复制
g = MyModel.objects.get(id_pk=id) 
g.prop_b = 'my text'
g.save()

但我想“动态”地做。使用_meta似乎也是不可能的:

代码语言:javascript
运行
复制
MyModel._meta.fields[2] = 'my text'

报告AttributeError: The return type of 'fields' should never be mutated.

代码语言:javascript
运行
复制
g = MyModel.objects.filter(id_pk=id)
list(g.values()[0])[2] = 'my text'

只需在副本中更改即可。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-27 22:13:35

您不能更改元字段,但可以使用元字段来获取动态访问模型字段所需的信息。

如果你想写一个字段,你需要属性的名称,你可以从meta API得到它。然后,您可以将其与setattr()一起使用,以动态访问模型对象。

第4个字段的示例:

代码语言:javascript
运行
复制
g = MyModel.objects.get(id_pk=id)
setattr(g, g._meta.fields[3].name, "my text")
g.save()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68546105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档