【问题标题】:How to avoid creation of foreign keys on Django Models?如何避免在 Django 模型上创建外键?
【发布时间】:2011-11-25 05:36:05
【问题描述】:

当我创建具有外键关系的模型时,如下所示:

class Post(models.Model):
    title = models.CharField(max_length=250)
    date_created = models.DateTimeField(auto_now=False, auto_now_add=True)
    owner = models.ForeignKey(User)

当我使用 syncdb 将这些模型转储到数据库时,它会创建表 post 和表 user 的外键。如何避免在 MySQL 中创建该外键。我讨厌外键有不同的原因。

谢谢!

编辑:

请大家不要回答:“你应该使用外键”。这不是我要问的。我有理由不使用它们。

【问题讨论】:

  • 我很好奇。你为什么讨厌外键?然后你会在你的代码中手动强制引用完整性吗?
  • 如果你不想要外键,你应该从不使用models.ForeignKey开始
  • @santiagobasulto 您以错误的方式完全处理问题。如果您有一个不称职的 DBA(是的,我会将任何做事而不注意理解其含义的人定义为不称职,因为我无法立即想到一个更强大的术语),请处理它。不要把你的网站弄得一团糟。
  • “我有理由不使用它们。”您最好更新问题以详细说明其中的每一个原因。我见过没有好的理由。我真的很想知道为什么这很重要,因为它违反了关系数据库(和 Django ORM)的工作方式。
  • @santiago 我们并不是要侮辱您的智商。只是除了“防止意外删除”之外没有更多信息,看起来你似乎走错了路。所有问题都是为了检测/抢占 XY 问题 (meta.stackexchange.com/questions/66377/what-is-the-xy-problem/…)

标签: python mysql django foreign-keys


【解决方案1】:

请不要。外键是正确的,你永远不应该阻止数据库保护自己的一致性。如果您需要对表格做一些特殊的事情(并且确保不会破坏其完整性),您可以暂时禁用检查:

SET foreign_key_checks = 0
# do something
SET foreign_key_checks = 1

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 2017-05-18
    • 2020-09-23
    • 2015-05-20
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多