【问题标题】:Tell Django's model to use as primary key a set of foreign keys告诉 Django 的模型使用一组外键作为主键
【发布时间】:2023-03-07 15:42:01
【问题描述】:

我有Persons 和Proposals。现在我想将Person's 的投票存储在Proposals 上。为此,我将创建另一个提供“中间”表的类。目标是将Person 与Proposal 联系起来,并关联投票direction(赞成或反对)。代码如下:

class Persons(models.Model):
   #code
class Proposal(models.Model):
   #code
class Vote(models.Model):
    """A Person (who) votes up or down (direction) a Proposal (what)."""
    who = models.ForeignKey(Person)
    what = models.ForeignKey(Proposal)
    direction = models.BooleanField()   # true = upvote = vote in favor

我希望投票的 PrimaryKey 是(谁,什么)在一起。相反,Django 创建了一个默认AUTO-INCREMENTED id 作为PrimaryKey 的表。 如何将 ForeignKey(或一组 ForeignKey)设置为 PrimaryKey?

【问题讨论】:

    标签: django django-models foreign-keys primary-key


    【解决方案1】:

    【讨论】:

    • 我应该使用 SQL 命令强制执行吗?即执行syncdb创建数据库,然后运行一组SQL命令删除默认的id键,让另外两个ForeignKey成为我的PrimaryKey。你怎么看?
    • 你必须这样做,因为 Django ORM 不可能为你做这件事。我的建议是使用 SQLAlchemy 而不是 Django ORM。
    • 再问一个问题:Django 是否支持将one ForeignKey 提升为 PrimaryKey?如果有,怎么做?
    • 嗯。如果您正在寻找程序化解决方案,您可能可以使用 South 来执行此操作,尽管我自己没有尝试过。
    • @DiAlex:ForeignKey 是一个字段。 :)
    【解决方案2】:

    我也遇到了类似的问题,我能够通过使用 unique_together 元(在您的情况下属于投票类)来解决它。阅读更多关于 unique_together 的信息

    https://docs.djangoproject.com/en/dev/ref/models/options/

    【讨论】:

      【解决方案3】:

      不幸的是,您可能无法使用 SQLAlchemy,因为标准 ORM 无法做到这一点。

      【讨论】:

        猜你喜欢
        • 2016-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-02
        • 2018-01-10
        • 1970-01-01
        相关资源
        最近更新 更多