django - 如何更改 django 基类的related_name?
问题描述
我被困在这种情况下:
我有两个不同的关系指向同一个模型,所以我必须给 m2m 字段一个related_name。
class A(models.Model):
b = models.ForeignKey(B, on_delete=models.SET_NULL, null=True,)
b_m2m = models.ManyToManyField(B, verbose_name='additional_a',
blank=True, related_name="additional_a_group")
它运作良好,直到我想继承它
class ABase(models.Model):
b = models.ForeignKey(B, on_delete=models.SET_NULL, null=True,)
b_m2m = models.ManyToManyField(B, verbose_name='additional_a',
blank=True, related_name="additional_a_group")
class Meta:
abstract = True
class A(ABase):
pass
class C(ABase):
pass
现在的问题是,B 与 A 和 C 的反向关系具有相同的 related_name additional_a_group
,我不知道如何解决它。
如果我删除 ABase 中的 related_name,b 和 b_m2m 会发生冲突。但是,如果我把它留在这里,A 和 C 就会发生冲突。
我回顾了源代码,related_name
被ManyToManyRel.get_accessor_name
. 也许我可以通过同时覆盖ManyToManyField
and来解决它ManyToManyRel
,但是有什么更简单的吗?
解决方案
它需要生成两个不同的related_names。
b_m2m = models.ManyToManyField(
B,
verbose_name='additional_a',
blank=True,
related_name="%(class)s_additional_a_group"
)
推荐阅读
- python - Python 全局变量在某些函数中更改,但在循环中其他函数没有更改
- xslt - 使用 xslt3.0 从 xml 中删除某些节点
- kdb - kdb - 从本地向服务器发送大型 CSV
- r - 在对数据框列进行计算时忽略计算中的 NA
- javascript - 如何将 textarea 值转换为 Javascript 代码?
- r - 使用 fread 将数据读入 R 时过滤文本
- pine-script - Pinescript 策略 - 执行不同数量的安全订单
- python - 我怎样才能恢复公会虚荣网址?
- javascript - HTML/Javascript 的新手,这些代码行有什么问题?
- javascript - 如何从谷歌 Firebase 存储中获取 json 文件