gpt4 book ai didi

django - 在迁移期间从方法变量动态创建 Django 模型字段

转载 作者:行者123 更新时间:2023-12-05 04:47:36 27 4
gpt4 key购买 nike

我的一个应用模型有一些预定义的字段,比方说:

class Data(models.Model)
user = models.CharField(max_length=50)
date = models.DateTimeField()

它还有一些基于传递到我想命名为“method_variable”的类的方法的变量的字段。下面是一个示例类,我想从中添加 meth0_var0 和 meth0_var1 作为数据模型中的 CharFields。

class A:
def meth0(self, var0, var1)
...

每当我迁移数据库时,我都想将这些变量动态添加到我的模型中(基本上只是节省了我写出所有字段的工作,因为有很多)。到目前为止,我已经尝试在定义模型后将其添加到我的 models.py 中:

methods = {k: v for k, v in dict(A.__dict__).items() if '__' not in k} # get rid of __init__ and such
for key in methods:
args = [arg for arg in getfullargspec(methods[key]).args if arg != 'self'] # get rid of self / methods that don't have any input variables
[setattr(Data, f'var_{key}_{arg}', models.CharField(max_length=50, default='Unrecorded')) for arg in args] # use what's left to create attributes in the class for migration

当我尝试运行 makemigrations 时,它找不到新字段,因此不会迁移。 setattr 与自己写出字段有何不同,或者 django 迁移的哪一部分忽略了我动态添加的属性?

最佳答案

Programmatically specifying Django model attributes 的重复种类

查看此答案 https://stackoverflow.com/a/2501419

似乎 add_to_class 比仅仅使用 setattr 有更多的逻辑:
https://github.com/django/django/blob/1eaf38fa87384fe26d1abf6e389d6df1600d4d8c/django/db/models/base.py#L324
主要也是通过contribute_to_class

调用 cls._meta.add_field

关于django - 在迁移期间从方法变量动态创建 Django 模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68416271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com