【问题标题】:Django pivot table without id and primary key没有 id 和主键的 Django 数据透视表
【发布时间】:2020-03-07 13:43:53
【问题描述】:

在数据库上我有 3 个表:

  1. languages
  2. cities
  3. city_language

city_language表格:

+-------------+---------------------+------+-----+---------+-------+
| Field       | Type                | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| city_id     | bigint(20) unsigned | NO   | PRI | NULL    |       |
| language_id | bigint(20) unsigned | NO   | PRI | NULL    |       |
| name        | varchar(255)        | NO   |     | NULL    |       |
+-------------+---------------------+------+-----+---------+-------+

型号

class CityLanguage(models.Model):
    city = models.ForeignKey('Cities', models.DO_NOTHING)
    language = models.ForeignKey('Languages', models.DO_NOTHING)
    name = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'city_language'
        unique_together = (('city', 'language'),)

模型没有 id 字段和主键,我的表也没有 id 列。如果我运行此代码,则会出现错误:

(1054, "Unknown column 'city_language.id' in 'field list'")

如果我为列定义主键,则该列值应该是唯一的。如果我想用不同语言放置同一个城市时使用primary_key,我会得到

这个城市(名称或语言取决于选择哪一列作为主键)已经存在。

我不想为数据透视表创建 id 列。没有理由为数据透视表创建 id 列。请你告诉我如何以正确的方式使用数据透视表。谢谢。

【问题讨论】:

  • Django 无法处理跨多列的主键,因此目前这是不可能的。
  • django 框架上哪种方式正确,我应该为它创建 id 列吗?

标签: python django python-3.x database django-models


【解决方案1】:

没有 primary_key 的 Django 不起作用。有两种方法可以解决:

  • 创建id(然后django模型就不用加主键了)
  • 创建其他唯一列并将其设置为主键,并使其唯一。

在我这边,我选择第二种方式创建了一个名为:unique_key 的列,并在模型中放入代码。

unique_key = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

你需要导入 uuid。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    相关资源
    最近更新 更多