假设一个模型
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),如下所示:
my_model = MyModel()
my_model[2] = 'my text'我知道可以通过使用变量名“静态地”做到这一点:
g = MyModel.objects.get(id_pk=id) 
g.prop_b = 'my text'
g.save()但我想“动态”地做。使用_meta似乎也是不可能的:
MyModel._meta.fields[2] = 'my text'报告AttributeError: The return type of 'fields' should never be mutated.和
g = MyModel.objects.filter(id_pk=id)
list(g.values()[0])[2] = 'my text'只需在副本中更改即可。
发布于 2021-07-27 22:13:35
您不能更改元字段,但可以使用元字段来获取动态访问模型字段所需的信息。
如果你想写一个字段,你需要属性的名称,你可以从meta API得到它。然后,您可以将其与setattr()一起使用,以动态访问模型对象。
第4个字段的示例:
g = MyModel.objects.get(id_pk=id)
setattr(g, g._meta.fields[3].name, "my text")
g.save()https://stackoverflow.com/questions/68546105
复制相似问题