在Django中从数据转储中排除多个字段
有没有办法在导出数据库的时候,排除不同表中的某些字段?我只找到可以完全排除一个模型的方法。(我在使用postgresql)。任何帮助都非常感谢。提前谢谢大家!
3 个回答
-1
你可以把数据保存到一个JSON文件里,然后用Notepad++或者类似的软件,把包含你字段名的每一行都删掉。这对我来说很有效,而且速度也很快。确保你的字段名是独一无二的,这样就不会删掉其他的行。
1
一个可能的技巧是定义一个新模型,只包含部分字段,并设置 managed=False
,同时在 Meta
中重写 db_table
字段。
你也可以通过定义一个公共的抽象父模型,来避免重复定义一些共同的字段。
class CommonBase(models.Model):
class Meta:
abstract = True
class ModelX(CommonBase):
pass
class SubsmetOfModelX(CommonBase):
class Meta:
managed = False
db_table = 'app_label_modelx'
这种方法的缺点可能包括:
- 在使用
dumpdata
时,至少需要排除上面提到的两个模型中的一个,否则dumpdata
会包含重复的对象。 - 如果
ModelX
中有任何null=False
的字段,而这些字段在子集模型中没有,那么对SubsetOfModelX
使用loaddata
时会失败。
1
这事儿不太简单。我建议你从Django的源代码里拿一份dumpdata.py的文件,放到你的项目里,然后根据自己的需要进行修改。其实,把它改成使用自定义管理器来导出数据,或者扩展排除功能以支持app.model.field,这些都不是太难。
听起来这是个挺有用的扩展功能。