Django中SQLite3同步云端PostgreSQL遇AttributeError问题求助
解决Django 2.0+中
ManyToManyField无rel属性的报错问题 这个报错我太熟悉了——Django 2.0对模型字段的核心API做了不小的改动,其中就包括移除了ManyToManyField和ForeignKey的rel属性,换成了remote_field,这也是你用老旧的django-synchro库会踩的典型版本适配坑。
直接给你落地的解决方案:
- 把代码里的
m2m.rel.through替换成m2m.remote_field.through,这是最直接的对应替换,完全适配Django 2.0+的字段API规范。 - 另外检查一下你用到的
_get_remote_field(m2m)函数,如果这个函数内部是依赖field.rel来实现的,也要同步改成field.remote_field。
修改后的核心代码片段大概是这样:
def get_intermediary(models): res = {} for model in models: # 替换m2m.rel.through为m2m.remote_field.through res.update((m2m.remote_field.through, _get_remote_field(m2m)) for ...)
如果_get_remote_field原来的实现是这样:
def _get_remote_field(field): return field.rel
那要同步改成:
def _get_remote_field(field): return field.remote_field
顺带提一句,django-synchro这类停更的老库适配Django 2.0+,除了字段API的改动,可能还有其他地方需要调整,比如URL配置里的url()函数要换成path()或re_path(),模型元类的一些旧属性也要对应更新,你可以慢慢排查适配。
内容的提问来源于stack exchange,提问作者user4612771
相关产品推荐
相关产品推荐

