首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用PostgreSQL DB在Django Rest框架中关联两个无外键的Django模型

在Django Rest框架中,如果需要关联两个无外键的Django模型,并使用PostgreSQL数据库,可以通过使用PostgreSQL的ArrayField来实现。

以下是一种实现方法:

  1. 首先,在Django的models.py文件中定义两个无外键的模型,例如ModelA和ModelB。
代码语言:txt
复制
from django.db import models

class ModelA(models.Model):
    name = models.CharField(max_length=100)
    # 其他字段...

class ModelB(models.Model):
    name = models.CharField(max_length=100)
    # 其他字段...
  1. 在ModelA中添加一个ArrayField字段,用于存储与ModelB相关联的数据。
代码语言:txt
复制
from django.contrib.postgres.fields import ArrayField

class ModelA(models.Model):
    name = models.CharField(max_length=100)
    model_b_ids = ArrayField(models.IntegerField(), blank=True, default=list)
    # 其他字段...
  1. 在Django的serializers.py文件中定义ModelA和ModelB的序列化器。
代码语言:txt
复制
from rest_framework import serializers
from .models import ModelA, ModelB

class ModelBSerializer(serializers.ModelSerializer):
    class Meta:
        model = ModelB
        fields = '__all__'

class ModelASerializer(serializers.ModelSerializer):
    model_bs = ModelBSerializer(many=True, read_only=True)

    class Meta:
        model = ModelA
        fields = '__all__'
  1. 在Django的views.py文件中定义API视图。
代码语言:txt
复制
from rest_framework import viewsets
from .models import ModelA, ModelB
from .serializers import ModelASerializer, ModelBSerializer

class ModelAViewSet(viewsets.ModelViewSet):
    queryset = ModelA.objects.all()
    serializer_class = ModelASerializer

class ModelBViewSet(viewsets.ModelViewSet):
    queryset = ModelB.objects.all()
    serializer_class = ModelBSerializer
  1. 在Django的urls.py文件中配置API路由。
代码语言:txt
复制
from django.urls import include, path
from rest_framework import routers
from .views import ModelAViewSet, ModelBViewSet

router = routers.DefaultRouter()
router.register(r'modela', ModelAViewSet)
router.register(r'modelb', ModelBViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

现在,你可以使用Django Rest框架中的API来创建、更新、删除和获取ModelA和ModelB的数据,并通过ArrayField字段实现两个模型的关联。

注意:以上代码示例中,并未涉及到具体的腾讯云产品和链接地址,因为在这个问题中要求不提及特定的云计算品牌商。如果需要在腾讯云上部署Django应用程序,你可以考虑使用腾讯云的云服务器、云数据库PostgreSQL版等产品。具体的产品介绍和链接地址可以参考腾讯云官方文档。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Python全栈100天学习笔记】Day41 Django深入理解框架

实际项目中,数据模型通常通过数据库实现持久化操作,而关系型数据库在过去和当下都是持久化首选方案,下面我们以MySQL为例来说明如何使用关系型数据库来实现持久化操作。...MySQL创建数据库SQL语句如下所示: create database oa default charset utf8; Django框架本身有自带数据模型,我们稍后会用到这些模型,为此我们先做一次迁移操作...使用ORM完成模型CRUD操作 了解了Django提供模型管理平台之后,我们来看看如何从代码层面完成对模型CRUD(Create / Read / Update / Delete)操作。...on_delete:关联对象被删除时对应动作,可取值包括django.db.models定义: CASCADE:级联删除。...db_tablespace 模型使用数据表空间 default_related_name 关联对象回指这个模型时默认使用名称,默认为_set get_latest_by 模型可排序字段名称

2.2K30

Django 1.10文文档-第一个应用Part2-模型和管理站点

SQLite包含在Python,所以你不需要另外安装其他任何东西。当然在你开始第一个真正项目时,你可能想使用一个更健壮数据库比如PostgreSQL来避免未来遇到令人头疼数据库切换问题。...: ENGINE-支持'django.db.backends.sqlite3', 'django.db.backends.postgresql_psycopg2', 'django.db.backends.mysql...每个模型由一个子类django.db.models.Model类表示。每个模型都有一些类变量,每个变量表示模型数据库字段。...(你也可以重写这个行为); 按照惯例,Django会在外字段名后面添加 "_id"。(你依然可以重写这个行为); 关系由FOREIGN KEY约束显式声明。...不用在意DEFERRABLE部分;它只是告诉PostgreSQL直到事务最后再执行关联; 这些SQL语句是针对你所使用数据库定制,所以会为你自动处理某些数据库所特有的字段例如auto_increment

2.3K60

django 1.8 官方文档翻译: 1-2-1 编写你第一个Django应用,第1部分

请参考 如何安装 Django 意见先删除旧版本 Django 再安装一个新。...在这简单投票应用,我们将创建两个模型: Poll 和 Choice。Poll 有问题和发布日期两个字段。Choice 有两个字段: 选项 ( choice ) 文本内容和投票数。...按照惯例,Django 会在外字段名上附加 “_id” 。 ( 是的,你仍然可以重写此行为。) 关系由 REFERENCES 语句显示声明。...引用字段名时也是如此 – 比如使用双引号或单引号。 本教材作者所使用PostgreSQL,因此例子输出PostgreSQL 语法。...Django 创建了 # 一个保存关联关系集合 ( 例如 poll choices) 以便可以通过 API # 去访问。

96520

django 1.8 官方文档翻译: 2-5-6 多数据库

这是纯粹验证操作,和多对多操作使用它来决定两个对象之间是否应该允许一个关联。...如果myapp任何一个模型包含与其它 数据库之外模型关联,这个例子将不能工作。跨数据关联引入引用完整性问题,Django目前还无法处理。...如果你使用一个路由来路由分离到不同数据库上,这些模型定义任何和多对多关联必须在单个数据库内部。 这是因为引用完整性原因。...为了保持两个对象之间关联Django 需要知道关联对象主键是合法。如果主键存储另外一个数据库上,判断一个主键合法性不是很容易。...因为跨数据库关联是不可能,这对你如何在数据库之间划分这些模型带来一些限制: contenttypes.ContentType、sessions.Session和sites.Site 可以存储分开存储不同数据库

1.5K20

Django 2.x实战(02) - 深入模型

':SQLite嵌入式数据库 'django.db.backends.postgresql':BSD许可证下发行开源关系型数据库产品 'django.db.backends.mysql':转手多次目前属于甲骨文公司经济高效数据库产品...OK 可以看到,Django帮助我们创建了10张表,这些都是使用Django框架需要东西,稍后我们就会用到这些表。除此之外,我们还应该为我们自己应用创建数据模型。...='员工姓名') job = models.CharField(max_length=10, verbose_name='职位') # 自参照完整性多对一关联 mgr = models.ForeignKey...:上面定义模型使用了字段类及其属性,其中IntegerField对应数据库integer类型,CharField对应数据库varchar类型,DecimalField对应数据库decimal类型...,ForeignKey用来建立多对一关联

43830

Django&DRF重点内容大盘点

大家可以了解了Django框架和DRF框架之后再来看这篇文章。否则会有点不知所云。...class Meta: db_table = '' 定义属性 hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE..., verbose_name='图书') # cascade是级联,删除主表数据时连同数据一起删除 1.12.3迁移生成表 1)生成迁移文件 python manage.py makemigrations...django.db.models import Count, Sum, Avg, Max, Min aggregate 排序 排序默认是升序,降序排序字段前加- order_by 关联查询...使用 1)配置文件设置配置项MEDIA_ROOT='上传文件保存目录' 2)定义模型类时,图片字段类型使用 ImageField 3)迁移生成表并在admin.py注册模型类,直接登录Admin

5.9K20

Django相关知识点回顾

class Meta: db_table = '' 定义属性: # 表中外字段名格式: hbook = models.ForeignKey('BookInfo...()过滤器调用聚合函数 排序: 排序默认是升序,降序排序字段前加- 使用order_by 关联查询: 1.查询和指定对象关联数据 # 由1查多 一对象.多类名小写_set.all() 例:book.heroinfo_set.all...() # 由多查1 多对象.属性 例:hero.hbook 2.通过模型类进行关联查询 # 查图书(一) 一类.objects.get|filter(多类名__字段__条件=值) 例:books =...查询结果缓存 使用同一个查询集时,只有第一次使用查询集时会进行数据库查询操作,然后Django框架就会把查询结果存起来,下一次再使用这个查询集时,使用Django之前存储结果。...使用 1.配置文件设置配置项MEDIA_ROOT='上传文件保存目录' 2.定义模型类时,图片字段类型使用 ImageField 3.迁移生成表并在admin.py注册模型类,直接登录Admin

10K51

【云+社区年度正文】Django从入门到精通No.2----模型

必填参数primary_key=True,则成为数据库主键,该字段时,django自动创建,一个model不能有两个该字段。...1.多对一 因为是关联关系,所以我们必须指定两个类来进行相互操作,这里涉及到一个操作,即ForeignKey字段,而且要定义一方。...db_constraint=True # 是否在数据库创建约束 parent_link=False # Admin是否显示关联数据 2.多对多 多对多表...,必须设中间关联表,关联表设独立主键,并引入两个“多”头主键作为关联。...=None # 自定义第三张表时,使用字段用于指定关系表那些字段做多对多关系表 db_constraint=True # 是否在数据库创建约束

2.1K00

Django来敲门~第一部分【5.2.模型和数据库交互】

可以从django.db.backends.sqlite3、django.db.backends.postgresqldjango.db.backends.mysql或者django.db.backends.oracle...创建模型对象 常规情况下,我们需要在程序,通过类和对象来封装我们数据,方便数据统一管理和使用Django模型对象规范做更加统一了,通常情况下将模块应用对象会常见应用模块应用/models.py...文件 废话不说,直接上干货: 我们mysite项目的polls应用,创建模型对象 # 引入django.db模块models模块 from django.db import models...管理模型对象 一旦创建好了我们模型类型,需要在项目中使用这些模型和数据库数据进行交互,首先我们要做是~将我们模块应用polls纳入到项目管理 很神奇一句话:“纳入到项目管理”,难道之前就木有项目管理吗...(MySQL)、serial(PostgreSQL)、integer primary key autoincrement(SQLite)等等 默认情况下Django会自动给增加_id形式命名(同样可以修改哦

43210

程序员硬核“年终大扫除”,清理了数据库 70GB 空间

清除表Bloat 就像在索引中一样,表也可能包含死元组,可能会导致碎片化。与包含关联数据索引不同,不能仅简单地重新创建表。...Django ORM迁移 为了将上述技术与Django一起使用,需要注意几件事: 防止隐式创建索引 除非明确设置db_index=False,否则Django会在models.ForeignKeyfield...为了防止这类隐式功不引起我们注意情况下潜入索引,我们创建了Django检查来强制自己始终显式设置db_index。...确定了要替换完整索引后,执行以下步骤: 用部分索引替换完整索引:如上所示,调整相关Django模型并用部分索引替换完整索引。...Django生成迁移将首先禁用FK约束(如果该字段是),则删除现有的完整索引并创建新部分索引。执行此迁移可能会导致停机和性能下降,我们实际上不会运行它。 手动创建部分索引:使用Django.

2.2K10

Django ORM 多表操作

ORM 多表操作 表模型 图书表 出版社表 作者表 作者详情表 表关系 一对一:一对一推荐建在查询频率高一方 一对多:字段建在多一方 多对多:字段建在查询频率多一方,Django第三张表不需要创建...,自动创建 ps:字段不需要写表名_id后面的_id,ORM创建时候自动添加了_id,以及以虚拟字段形式存在 创建模型 '''models.py''' from django.db import...3、一般不需要设置联级更新. 4、一对多设置:models.ForeignKey("关联类名", on_delete=models.CASCADE)。...6、若有模型类存在外,创建数据时,要先创建关联模型数据,不然创建包含模型数据时,关联模型数据会找不到 逆向到表模型 插入数据 ps:插入几条数据方便操作 ORM...(常用) 一对多,设置属性类(多表),MySQL 显示字段名是:属性名_id。

1.7K20

Django 3.1 官网学习路线

migrate 命令只会在 INSTALLED_APPS 运行应用程序迁移。 创建模型 我们投票应用程序,我们将创建两个模型: 问题和选择。问题有问题和发布日期。...字段还可以有各种可选参数;本例,我们将投票默认值设置为 0。 最后,请注意使用定义了关系。这告诉 Django 每个选择都与一个问题相关。...按照惯例,Django 会将"_id"附加到外字段名。(是的,你也可以重写这个。) 关系是通过约束来显式。...不要担心可延期部分;它告诉 PostgreSQL 事务结束之前不要强制执行。...“添加选择”表单如下所示: 该表单,“Question”字段是一个选择框,包含数据库每个问题。Django 知道一个应该在管理中表示为一个框。我们例子,目前只存在一个问题。

8.1K10

Django模型入门教程-操作MySQL

Django 为我们提供了一种更简单操作数据库方式。 Django 模型(Model)是用来定义数据库结构类。每个模型类通常对应数据库一个表,类属性对应表列。...要使用数据库引擎常用引擎包括: 'django.db.backends.postgresql'(PostgreSQL) 'django.db.backends.mysql'(MySQL) 'django.db.backends.sqlite3...这些表迁移文件已经包含在 Django框架,当执行迁移时,Django会为这些默认应用程序创建必要数据库表。 创建模型 创建模型之前我们需要知道这个模型属于哪一个应用下。...user:关联用户 models.ForeignKey:要关联,用于定义多对一关系。...这里传入第一个参数是要关联模型;第二个 on_delete=models.CASCADE 表示关联删除,当用户被删除时,对应文章也会一起被删除。

5310

Django ForeignKey与数据库FOREIGN KEY约束详解

数据库高并发场景下使用约束会有锁问题并且使用会增加运维成本,所以很多公司都规定生产环境数据库禁止使用。...那么不使用约束情况下使用 Django ORM 如何实现关联查询两个表呢?这曾是困扰我很久一个问题,今天终于找到了答案,写出来分享一下。...Django ForeignKey 是一种逻辑上两个关联关系,可以指定是否使用数据库 FOREIGN KEY 约束。...开头提到场景下,我们可以这样创建两个表对应 Model,以省和市关联举例: # demo/models.py from django.db import models class Province...`name` = xxx; 补充知识:关于Django模型定义auto_now=True 数据库时间并没有自动更新 djangoorm关于更新数据库方法有update和save两种方法

2.5K10

Django 学习笔记之模型(上)

如果你是按照本系列来学习 Django 框架的话,按照前面安装 Django 方式,你安装 Django 版本应该是最新版本,即 2.0。 那么使用最新 Django 版本来学习可以吗?...顺便补充下本文用一些工具版本:Python 版本是 3.6,Mysql 版本是 5.5 1 模型是什么 Web 应用,数据一般存储到数据库Django 模型层是跟数据库打交道层次。...2 配置数据库 我们探索 Django 模型层之前,我们需要配置下数据库;告诉 Django 视野什么数据库以及如何连接数据库。这一步要确保配置无误,不然后面难以执行。...有一个或多个作者(和作者是多对多关联关系[many-to-many]), 只有一个出版商(和出版商是一对多关联关系[one-to-many],也被称作[foreign key]) 所以我们编写代码如下...你可以通过显式地指定 db_column 来改变该字段列名称,不过,除非你想自定 义 SQL ,否则没必要更改数据库列名称。 它第一个参数必须传入该模型关联类。

1.8K30

Django REST 框架详解 04 | 序列化与反序列化及二者整合

文章目录 一、序列化 1.步骤 2.模拟场景 3.模型构建 4.序列化 5.视图 6.路由 7.测试接口 二、反序列化与验证 1.反序列化 2.视图 3.测试接口 三、序列化与反序列整合...modes.py from django.db import models # 基表 # 提供公用字段,而不创建表 from django.contrib.auth.models import User...publish ,提数据 publish = PublishModelSerializer() class Meta: # 序列化类关联 model 类...def validate(self, attrs): # 同一出版社不能出版同一本书 publish = attrs.get('publish') # 这里已经变成对象...三、序列化与反序列整合 从数据安全性和健壮性来考虑,所有的自定义字段不能与 model 原字段相同 因为序列化是将字段作为 Dict,而反序列化会将字段作为 Object 1.视图 views.py

96110

Django之ForeignKey和ManyToManyField多表查询

只有db_constraint=True时Django model才会在数据库上建立约束, 该值为False时不建立约束. 默认db_constraint=True....如Entry.blog作为Blog,默认情况下Blog.entry_set是包含所有参照BlogEntry示例查询集,可以使用查询集API取出相应实例。...ManyToManyField.through_fields 上文示例Membership 有两个键指向Person (person 和inviter),这使得关联关系含混不清并让Django 不知道使用哪一个...在这种情况下,必须使用through_fields 明确指定Django 应该使用哪些 through_fields 接收一个二元组('field1', 'field2'),其中field1 为指向定义...ManyToManyField 字段模型键名称(本例为group),field2 为指向目标模型名称(本例为person).

1.7K10
领券