提问人:dani r 提问时间:11/13/2023 最后编辑:dani r 更新时间:11/13/2023 访问量:24
Django - 创建了一个链接到我的 PSQL 的 Web 应用程序,但是当我将数据插入我的一个表时,会出现没有 ID 的错误
Django - Created a web app which is linked to my PSQL, but when inserting data to one of my tables gives error for no ID
问:
我有一个表,其中只有两列exercise_id和muscle_id
create table if not exists exercise_muscle(
exercise_id INT not null,
muscle_id INT not null,
primary key (exercise_id, muscle_id),
foreign key (exercise_id) references exercise(exercise_id),
foreign key (muscle_id) references muscle(muscle_id)
);
但是当我尝试使用下面看到的模型将数据插入其中时
class ExerciseMuscle(models.Model):
exercise = models.ForeignKey('Exercise', on_delete=models.CASCADE)
muscle = models.ForeignKey('Muscle', on_delete=models.CASCADE)
class Meta:
db_table = 'exercise_muscle'
unique_together = ('exercise', 'muscle')
我在尝试返回不存在的 exercise_muscle.id 时收到此错误
django.db.utils.ProgrammingError: column exercise_muscle.id does not exist
LINE 1: ...xercise_id", "muscle_id") VALUES (1, 1) RETURNING "exercise_...
我还检查了我的 django dbshell,它看起来一切正常
\d exercise_muscle
Table "public.exercise_muscle"
Column | Type | Collation | Nullable | Default
-------------+---------+-----------+----------+---------
exercise_id | integer | | not null |
muscle_id | integer | | not null |
Indexes:
"exercise_muscle_pkey" PRIMARY KEY, btree (exercise_id, muscle_id)
Foreign-key constraints:
"exercise_muscle_muscle_id_fkey" FOREIGN KEY (muscle_id) REFERENCES muscle(muscle_id)
并检查了我的 psql 表,它没有 id 列
答:
1赞
CoffeeBasedLifeform
11/13/2023
#1
Django 不支持多列主键。
Django 模型是否支持多列主键?
不。仅支持单列主键。
但这在实践中不是问题,因为没有什么可以阻止的 您无需添加其他约束(使用 unique_together 模型 选项或直接在数据库中创建约束),以及 在该级别上强制执行唯一性。单列主键是 管理界面等需要工作;例如,您需要 用于指定要编辑或删除的对象的单个值。
另请参阅:https://stackoverflow.com/a/61320607/9313033
Django 需要一个主键字段。如果你没有在模型声明中声明 PK 字段,Django 将添加一个默认的 AutoField 调用,在为模型创建迁移时调用。你没有声明 PK 字段,所以 Django 需要默认值。但默认字段不存在,因为您是手动创建的表,而不是通过运行迁移。id
要么自己手动添加主键字段,要么完全删除表,让 Django 通过运行后跟 .id
python manage.py makemigrations
python manage.py migrate
评论