猿问
下载APP

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

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


繁星点点滴滴
浏览 151回答 3
3回答

拉莫斯之舞

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

慕慕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)的方式进行赋值。

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)
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答