gpt4 book ai didi

django - 使用特定模型强制或测试所有 ForeignKey 字段的 on_delete 行为

转载 作者:行者123 更新时间:2023-12-04 15:08:11 25 4
gpt4 key购买 nike

假设我有一个代理用户模型

class UserWithProfile(User):
profile_description = models.TextField()

class Meta:
proxy = True
ordering = ('first_name', )

我想确保在删除此配置文件时删除所有将来可能与 UserWithProfile 条目相关联的数据。换句话说,我想保证所有引用此模型的现有和 future ForeignKey 字段的 on_delete 行为。

如何实现检查此行为的测试,或在实现另一个 on_delete 行为时引发错误?

我知道可以创建一个自定义的 ForeignKey 类,这就是我可能会做的,...

class UserWithProfileField(models.ForeignKey):
def __init__(self, *args, **kwargs):
kwargs.setdefault('to', UserWithProfile)
kwargs.setdefault('on_delete', models.CASCADE)
super().__init__(*args, **kwargs)

...然而,这无法阻止 future 的用户使用具有不同 on_delete 行为的 ForeignKey 类。

最佳答案

您可以覆盖 on_delete 参数,而不是 setdefault:

class UserWithProfileField(models.ForeignKey):
def __init__(self, *args, **kwargs):
<b>kwargs['to']</b> = UserWithProfile
<b>kwargs['on_delete']</b> = models.CASCADE
super().__init__(*args, **kwargs)

无论用户现在将使用什么to=...on_delete=...,它将使用UserWithProfileCASCADE.

严格来说,当然仍然可以尝试更改 ForeignKey 的属性,但那更复杂,尤其是因为 Django 构造了一个 ForeignObjectRel 对象来存储关系详细信息.

请注意 proxy model [Django-doc]不用于向模型添加 exta 字段。这更多是为了改变顺序等,并定义新的/其他方法。

关于django - 使用特定模型强制或测试所有 ForeignKey 字段的 on_delete 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65690832/

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