【问题标题】:How to set the range of the primary-key of django objects based on the foreign key range and is it advisable?如何根据外键范围设置django对象的主键范围,是否可取?
【发布时间】:2020-02-06 21:41:13
【问题描述】:

我有以下型号:

class Author(model):
    name = CharField(...)

class Post(mode):
    author = ForeignKey(Author)
    title = CharField(...)

假设我们最多有 100 位作者。所以 autors 的主键将在 1 到 100 的范围内 我希望帖子模型的主键基于帖子作者的主键。

我的意思是,如果作者的主键是34,那么他/她的帖子主键是34000001、34000002、34000003

建议这样做,我该怎么做?

【问题讨论】:

  • 没有。不建议将 pk 视为不透明值以外的任何值。
  • 正如丹尼尔所说。你为什么想要那个?
  • 如果不建议,我不会这样做。我的原因是对数据库有更多的控制权。除了不可取之外,这种控制也不值得头疼。

标签: django model foreign-keys primary-key


【解决方案1】:

这通常是不可取的,并且可能会诱使您遵循(或发明)反模式。例如,如果您的目标是能够轻松访问特定作者的帖子,那么使用 Django 的普通 ORM 模式是最安全的。例如:

# models.py
class Author(model):
    name = CharField(...)

class Post(model):
    author = ForeignKey(Author, related_name='posts')
    title = CharField(...)

那么你可以在任何你想要的地方......

sally = Author.objects.get(id=1)
sallys_posts = author.posts.all()

这比你可能想做的事情安全得多,比如Post.objects.filter(pk__startswith=sally.pk),我认为这会导致大量错误,也意味着你会错过很多普通模式 Django ORM 的好处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 2015-05-12
    • 2011-01-22
    相关资源
    最近更新 更多