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

Python DRF PrimaryKeyRelatedField将使用uuid而不是PK

Python DRF(Django REST Framework)中的PrimaryKeyRelatedField是一个序列化字段,用于表示与其他模型之间的关系。默认情况下,PrimaryKeyRelatedField使用主键(PK)来表示关联关系,但可以通过设置serializer中的queryset属性来更改其行为。

在使用PrimaryKeyRelatedField时,如果希望使用UUID(Universally Unique Identifier)而不是PK来表示关联关系,可以通过以下步骤实现:

  1. 首先,确保相关模型的主键字段是UUID类型。可以使用Django的UUIDField来定义主键字段,例如:
代码语言:txt
复制
from django.db import models
import uuid

class MyModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    # other fields...
  1. 在DRF的serializer中,将PrimaryKeyRelatedField的queryset属性设置为相关模型的查询集,并将lookup_field属性设置为'id',以便使用UUID来查找关联对象。例如:
代码语言:txt
复制
from rest_framework import serializers
from .models import MyModel

class MyModelSerializer(serializers.ModelSerializer):
    related_model = serializers.PrimaryKeyRelatedField(queryset=MyModel.objects.all(), lookup_field='id')

    class Meta:
        model = MyModel
        fields = '__all__'

这样,当使用MyModelSerializer进行序列化或反序列化时,related_model字段将使用UUID来表示关联关系。

优势:

  • 使用UUID作为关联关系的标识符可以提供更好的数据安全性,因为UUID是全局唯一的,难以被猜测或猜测到其他对象的标识符。
  • UUID可以在分布式系统中使用,不会出现主键冲突的问题。

应用场景:

  • 当需要在不同的数据库实例之间进行数据同步或复制时,使用UUID作为关联关系的标识符可以更方便地处理数据一致性和冲突问题。
  • 在需要保护数据隐私和安全性的应用程序中,使用UUID可以减少对关联关系的猜测和攻击。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(Elastic Cloud Server):https://cloud.tencent.com/product/cvm
  • 腾讯云对象存储(Cloud Object Storage):https://cloud.tencent.com/product/cos
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云区块链(Blockchain):https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse

请注意,以上链接仅供参考,具体产品选择应根据实际需求和情况进行评估和决策。

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

相关·内容

DRF框架学习(二)

1.Restful API接口实现 1.1需求实现思路 1、获取指定的图书信息: 1)根据pk获取指定的图书对象(pk由查询字符串的形式传给后端) 2)图书的json数据返回,状态码:200 2、修改指定的图书信息...: 1)根据pk获取指定的图书对象 2)删除对应数据 3)返回响应,状态码:204 注意: pk是id的一个别称 重点掌握的是实现的思路,如何去需求一步步实现出来,然后其次重要的就是代码。...需要以下依赖: Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6) Django (1.10, 1.11, 2.0) DRF是以Django扩展应用的方式提供的,所以我们可以直接利用已有的...'rest_framework', ] 接下来就可以使用DRF进行开发了。...heroinfo_set = serializers.PrimaryKeyRelatedField(read_only=True, many=True) 2)使用指定的序列化器关联对象进行序列化(字典套字典的显示方式

4.1K30
  • 重点内容回顾-DRF

    所有的精力放在你主要的事情上,对于一些琐事、一些惹恼的小人,一些阻碍你前进的事物,不妨看淡一点,暂时的妥协并不是向他们低头,而是跟本没把他们放在心上。...创建子应用: python manage.py startapp 子应用名称 c. 使用shell: python manage.py shell d....迁移 生成迁移文件: python manage.py makemigrations 同步到数据库中: python manage.py migrate g....4.关联对象的嵌套序列化 4.1PrimaryKeyRelatedField 关联对象序列化为关联对象的主键。...数据库查询 属性: queryset(指定视图所使用的查询集) 方法: get_queryset返回视图所使用的查询集 get_object从视图所使用的查询集中查询指定的对象,默认根据pk进行查询。

    2.4K20

    RESTframework_一

    这种应用模式只适用于纯网页应用,当后端对接APP时,App可能不需要后端网页,只是需要数据,所有不适用,需要重新开发接口. 前后端分离 ?...(JSON格式)转化为模型对象 操作数据库 模型对象转化为响应的数据(JSON) 序列化: Python类型转化为JSON数据 反序列化: JSON数据转化为Python数据 总结 开发REST...丰富的定制层级:函数视图,类视图,视图集合到自动生成API,满足各种需要 多种身份认证和权限认证的支持 内置限流系统 直观的API web 界面 可扩展性,插件丰富 创建 REST framework 工程 安装DRF...'rest_framework', ] ``` 序列化器 功能: 序列化操作: Python类型(模型类对象,模型类对象的列表)转换成字典 反序列化操作: json转换成字典 定义序列化器: 继承自...HeroInfo.objects.all(),many=True).data print(hero_dict) return HttpResponse('OK') 注意:serializer不是只能为数据库模型类定义

    71720

    DRF中多对多ManytoMany字段的更新和添加

    背景:drf的序列化器给模型输出带来了便利但是对于多对多字段网上查询的内容却是很少(也有可能是本人不会搜答案)经过我多个日夜的摸索,终于实现了我的需求,现将自己的心得记录一下说下我的需求:定义一个订单模型里面的订单...models here.class OrderCenter(models.Model): orderId = models.UUIDField(verbose_name='订单编号', default=uuid.uuid4...or self.action == "retrieve": return ReadOrderCenterSerializer else: # 当不是...如果解决的话应该还是要加判断或者其他的处理方法3、针对第二点的解决方法个人认为如果有新的菜品添加的话就要删除当前的订单再重新添加这样的逻辑应该就说的通了,不过具体还要看使用的需求。...主要是一个思路,drf 的ModelSerializer 和 ModelViewSet 封装的太严实了,通过这样的方法来更新和添加多对多字段实属自己技术不成熟。

    90120

    Django REST Framework-路由的正则表达式

    在Django REST Framework(DRF)中,路由系统是一个重要的概念,用于请求路由到正确的视图函数。路由系统使用正则表达式来匹配URL。...在DRF中,路由正则表达式是基于Python的re模块实现的。正则表达式中使用的一些关键字符和符号在DRF中也具有特殊含义,我们将在下面的章节中详细讨论这些内容。...基本用法在DRF中,路由正则表达式通常用于URL模式与视图函数匹配。...():表达式分组,以便可以将其作为单个单元处理。示例接下来,我们通过一些示例来演示DRF路由正则表达式的使用。...>/', ArticleView.as_view(), name='article'),]在上面的代码中,我们使用来定义一个名为“pk”的整数参数,并将其与视图函数相关联。

    73911

    【愚公系列】2022年04月 Python教学课程 69-DRF框架之五个扩展类视图的子类视图

    1.封装序列化器的常用方法 2.序列化器的定义 3.视图定义使用序列化器 总结 ---- 一、DRF框架之五个扩展类视图的子类视图 常用子类视图 1.CreateAPIView 提供 post 方法...data(self): """ 获取序列化结果方法 :return: """ return {'btitle': 'python...from genericapiview import GenericAPIView class BookView(GenericAPIView): queryset = {'btitle':'python...相关DRF框架的API介绍: 获取列表资源list(request) 新建单一资源self.create(request) 获取单一资源self.retrieve(request, pk) 全更新单一资源...self.update(request, pk) 部分更新单一资源self.partial_update(request, pk) 删除单一资源self.destroy(request, pk)

    30220

    用django写接口(入门篇)

    环境及项目搭建》 《django入门:数据模型》 《django入门:视图及模版》 《django入门:Admin管理系统及表单》 《django入门:通用视图类重构视图》 之前5篇讲的Web界面相关的,接下来的...manage.py runserver 192.168.x.xxx:8080 然后通过网址 http://192.168.x.xxx:8080/api/posts/ 查看 restful 接口,是不是和我们平时从后台获取的接口很像...): # 根据 pk 值获取对应的 post 实例 post = get_object_or_404(Post, pk=pk) # 首先判断是否存在这个 post,不存在直接返回...AuthorSerializer(serializers.ModelSerializer): # 会显示所有该 author 下的 posts posts = serializers.PrimaryKeyRelatedField...OK,这部分我们先到这,下一部分我们通过 DRF 内置的视图函数,视图类对我们现在 views 中的代码进行优化,敬请期待......最后把图补上 ? 调整后的列表接口信息 ?

    3.1K30

    drf框架中所有视图及用法

    0909自我总结 drf框架中所有视图及用法 一.drf框架中的所有视图类 from django.views import View from rest_framework import views,...generics, mixins, viewsets 最基础:django自带的views类 drf框架中最基础的视图类:views.APIView drf框架中工具视图:generics GenericAPIView...retrieve', 'delete': 'remove_obj'}) GenericViewSet:与模型类有关的接口视图集 - 可以从mixins那继承功能,也可以自定义功能 ViewSet:与模型类无关或不是标准模型类接口...- 一般都是自定义功能 三.generics中GenericAPIView使用 queryset 和 serializer_class 封装成类属性,提供了三个方法 self.get_queryset...queryset serializer_class 如果我们要使用get_object()必须前端传给我们一个pk 四.mixins使用 mixins是在generics再进行方法的分装成5个方法 RetrieveModelMixin

    1.8K30

    django rest framework serializers解读

    “翻译出来就是,复杂的数据结构变成json或者xml这个格式的。 queryset与model实例等进行序列化,转化成json格式,返回给用户(api接口)。...create(self, validated_data): # 除了用户,其他数据可以从validated_data这个字典中获取 # 注意,users在这里是放在上下文中的request,不是直接的...serializers.Serializer,那么直接用PrimaryKeyRelatedField就解决了。...假设现在有一门课python入门教学(course),它的类别是python(catogory)。...假设现在是一个多级分类的课程,例如,编程语言–>python–>python入门学习课程,编程语言与python属于类别,另外一个属于课程,编程语言类别是python类别的一个外键,而且属于同一个model

    1.8K10
    领券