为了账号安全,请及时绑定邮箱和手机立即绑定

请教一下Django的orm中怎么让外键字段不加_id?

/ 猿问

请教一下Django的orm中怎么让外键字段不加_id?

Django的orm中怎么让外键字段不加_id


查看完整描述

3 回答

?
拉莫斯之舞

外键在数据库中的默认字段名是它在模型中的属性名+_id。可以在创建外键时使用db_column参数显式地指定一个字段名,来覆盖这么默认字段名。
author = models.ForeignKey('Author', on_delete=models.CASCADE, db_column='foobar')
那么数据库中这个外键字段名就是foobar,而不是author_id。

查看完整回答
反对 回复 2019-08-24
?
慕慕0277861

先给data赋值了之后,再去用p保存。例如:
data=Lessonruntime()
data.***=*** #(给data的列赋值)
data.save() #保存data(注,只有在新建data数据时才要,否则用 Lessonruntime.object.get()来获取data的值)
p = Checkinlog(lessonruntimeid=data)

p.save()
这样就可以了。
不可以用 p = Checkinlog(lessonruntimeid=1134)的方式进行赋值。

查看完整回答
反对 回复 2019-08-24
?
POPMUISE

首先题主用的Django版本是什么,django貌似没见过ForeignModel,根据orm,ForeignKey实际上就是sql里面的外键,个人理解楼主的题目是能不能一个字段对应多个其他表,如下:
class WhatAreYouTryToAsk:
filed_XXX = models.ForeignKey((ModelA,ModelB,))

这是不科学的啊亲,对于sql来说也不会一个字段能对应多个外键,想实现这种效果只能是有一张ModelA,ModelB的中间表,而filed的外键对应这张中间表
class MiddleTable(models.Model):
model_a = models.ForeignKey(ModelA)
model_b = models.ForeignKey(ModelB)

class WhatAreYouTryToAsk:
filed_XXX = models.ForeignKey(MiddleTable)

简单的说就是ModelA和ModelB有一个多对多的关系,上面的方法是显示的指明一个MiddleTable表,实时上可以使用Django里面的ManyToMany,ManyToMany的实际上会建一张中间表,因此你可以在ModelA或ModelB建立一个ManyToMany的字段,具体ManyToMany的用法请查阅文档。
class ModelA(models.Model):
model_bs = ManyToMany(ModelB)

class WhatAreYouTryToAsk:
filed_XXX = models.ForeignKey(ModelA)
# or this, 具体实现看需求
# filed_XXX = models.ForeignKey(ModelB)



查看完整回答
反对 回复 2019-08-24

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信