首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Django中,如果大多数外键是空白的,那么设置可选外键的最佳方法是什么?

在Django中,如果大多数外键是空白的,那么设置可选外键的最佳方法是什么?
EN

Stack Overflow用户
提问于 2015-02-13 13:08:15
回答 1查看 638关注 0票数 0

这一个这样的问题中,我知道在django中创建可选外键的推荐方法是设置null=True, blank=True。这样,就不必设置外键的值。

如果在模型中经常使用外键,这对我来说似乎很好。但是,如果大多数外键是空值,那么这难道不违反第一范式并造成大量浪费空间吗?

当然,数据库中的null值是可能会引起争议的主题,但是如果我知道外键将是稀疏的,我仍然想知道如何在Django中设置可选外键。Django已经考虑到这一点了吗?我应该为这种关系建立一个单独的模型吗?在Django的设计过程中是否已经考虑到了这一点?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-13 13:39:09

您可以使用第三个表模拟可空外键:

代码语言:javascript
复制
class City(models.Model):
    name = models.CharField(max_length=80)

class Person(models.Model):
    name = models.CharField(max_length=80)

class PersonCity(models.Model):
    person = models.ForeignKey(Person, unique=True)
    city = models.ForeignKey(City)

这样,您将只在表PersonCity中为那些具有已知City的人创建一行。要进入某一特定人的城市,您将使用:

代码语言:javascript
复制
city = person.personcity_set().first().city

您可以创建一个自定义管理器来缩短这个语法,并检查空personcity_set,但我个人认为创建一个可空的外键仍然更容易阅读和调试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28500331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档