- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请让我考虑以下两个模型:
class Policy(models.Model):
name = models.SlugField(max_length=256, blank = False, unique = True)
def default_policy():
return Policy.objects.get(name='default').pk
class Item(models.Model):
policy = models.ForeignKey('Policy', on_delete=models.SET_DEFAULT, default=default_policy)
除了一个操作外,一切都按预期工作。我仍然可以毫无异常(exception)地执行以下操作:
p = Policy.objects.get(name='default')
p.delete()
这会产生孤立的 Item
,它们指的是“默认”Policy
对象。不幸的是,此操作会导致数据库中出现完整性问题,因为 Item
的 policy_id 列现在引用了 Policy
表的丢失记录。
我怎样才能防止这种情况发生?我可以接受在没有 Item
引用时删除“默认”Policy
。
最佳答案
这取决于您的业务需求。每个 Item
都应该始终指向一个有效的 Policy
吗?当 Policy
被删除时,从业务角度来看有什么要求?指向它的 Item
是否也应该被删除?我们不知道您的要求,所以很难回答您的问题。从技术角度来看,这些是您的选择:
Policy
时删除 Item
,请设置 on_delete=CASCADE
on_delete=PROTECT
如果您不想让任何Policy
被删除,如果仍然有任何Item
指向它。在这种情况下,您将不得不 尝试:policy.delete();除了 ProtectedError: ...
在您的代码中处理这种情况。on_delete=SET_DEFAULT
(您可以覆盖 Policy
上的 delete
方法以避免删除默认策略)。Item
可以没有Policy
,则设置on_delete=SET_NULL
。这在某些业务场景中可能有效。但在这种情况下,您还必须有 null=True
。关于Django:外键 on_delete SET_DEFAULT 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48322538/
我是 argparse 的新手,所以这可能是基础。 我更喜欢将所有字符串常量定义一次 (blah = 'foo'),然后在整个代码中使用它。当我到达 set_defaults 时,似乎我仅限于 kwa
在下面的示例中,您如何以及在哪里设置默认值? author = models.ForeignKey('作者', on_delete=models.SET_DEFAULT) 最佳答案 对于 SET_DE
请让我考虑以下两个模型: class Policy(models.Model): name = models.SlugField(max_length=256, blank = Fal
请让我考虑以下两个模型: class Policy(models.Model): name = models.SlugField(max_length=256, blank = Fal
我不明白如何在 onDelete 的外键中使用 set_default。 我在哪里设置子行的默认值?请告诉我,我能做什么? 最佳答案 它们被添加到 Entity 注解类的变量声明处。 例如(在 Kot
从这里:http://googlecloudplatform.github.io/gcloud-python/datastore-api.html from gcloud import datasto
最近我已经成功地重新安装了 Devstack 几次。今天我收到以下错误: ==> default: 2016-11-10 13:26:02.723 | Initializing Designate =
我是一名优秀的程序员,十分优秀!