【问题标题】:Foreign Key to single attribute from another entity in DjangoDjango中另一个实体的单个属性的外键
【发布时间】:2017-10-28 11:01:08
【问题描述】:

我想在 django 中创建数据库模型并定义一个外键。我在网上看到的所有例子都有以下语法。

attr = models.ForeignKey(Entity) 

但是我希望外键与另一个实体的单个属性链接,而不是整个实体。

我有以下型号:

class User(models.Model):
user_id = models.PositiveIntegerField(primary_key=True)
password = models.CharField(max_length=20)
email = models.EmailField()
........

class ContentItem(models.Model):
content_id = models.PositiveIntegerField(primary_key=True)
title = models.CharField(max_length=100)
description = models.TextField()
.........
author_id = models.ForeignKey(User, on_delete= models.CASCADE)

在这里,我希望 ContentItem.author_id 成为 User.user_id 而不是整个 User 模型的外键。在为 author_id 输入值时,我只想输入普通 id (1,2,3) 而不是 User 的所有实例

对不起,如果问题很笼统,提前致谢

【问题讨论】:

  • 这没有意义。外键是链接表中项目的 ID。显然,遵循这种关系会给你整个相关的对象——你为什么不想要呢?

标签: python django database sqlite django-models


【解决方案1】:

您应该将 fk 字段命名为:

author = models.ForeignKey(User, on_delete= models.CASCADE)

因为 Django 会自动创建属性author_id 并且

content_item.author_id

将使您可以直接访问用户的 id,而无需额外的 db 命中。使用您的命名,您可以直接通过author_id_id访问该id。

【讨论】:

    【解决方案2】:

    您必须在模型类中覆盖 str(self) 方法。 例如。

    models.py

    类用户(models.Model): . . .

    def __str__(self):
        return f”{self.attribute-name}
    

    其中attribute-name 是您要引用的属性的名称。 享受编码??

    【讨论】:

      猜你喜欢
      • 2021-05-30
      • 2014-12-03
      • 1970-01-01
      • 2013-12-30
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多