首页 > 其他分享 >Django 含有外键模型新增数据以及序列化

Django 含有外键模型新增数据以及序列化

时间:2023-02-10 14:36:07浏览次数:56  
标签:__ name models app 外键 Django 序列化 class

https://www.cnblogs.com/SunshineKimi/p/14042914.html

Django 原生实现外键

class AppleModel(models.Model):
    id=models.AutoField(primary_key=True)
    app_name=models.CharField(max_length=50)
 
class PickleModel(models.Model):
    pid=models.AutoField(primary_key=True)
    app=models.ForeignKey(to="AppleModel",on_delete=models.CASCADE,related_name="app")
    color=models.CharField(max_length=20)
 
python manage.py shell
 
app=AppleModel(app_name="iphone")
pickle=PickleModel(app=app,color="red")

另外一个例子,测试没问题的

class Merchant(models.Model):
    name = models.CharField(max_length=200, verbose_name='商家名称', null=False)
    address = models.CharField(max_length=200, verbose_name='商家地址', null=False)
    logo = models.CharField(max_length=200, verbose_name='商家logo', null=False)

class GoodsCategory(models.Model):
    name = models.CharField(max_length=20, verbose_name='分类名称')
    merchant = models.ForeignKey(Merchant, on_delete=models.CASCADE)

python manage.py shell
>>> merchant1=Merchant.objects.get(pk=45)
>>> GoodsCategory.objects.create(name="独特夜宵",merchant=merchant1)
<GoodsCategory: GoodsCategory object (324)>

DRF 实现:

class SerApple(serializers.ModelSerializer):
 
    class Meta:
        model=AppleModel
        fields = "__all__"
 
class SerPickle(serializers.ModelSerializer):
    class Meta:
        model=PickleModel
        fields = "__all__"

由于主表是Apple ,从表是Pickle,所以必须先创建主表,从表由于包含外键,所以如果先创建从表时会报错 "无效主键 “1” - 对象不存在。":

img

所以外键序列化就需要先序列化主表:

img

img

现在需求查询pickle表时想展示对应的外键的app的中文名称在返回响应里,而不是id

需要操刀修改序SerPickle列化器了:

修改后如下:

class SerApple(serializers.ModelSerializer):
 
    class Meta:
        model=AppleModel
        fields = "__all__"
 
class SerPickle(serializers.ModelSerializer):
    # source 格式Pickle模型外键模型字段名.主表的字段属性
    app_name=serializers.CharField(source="app.app_name",read_only=True)
    class Meta:
        model=PickleModel
        # fields = "__all__"
        fields = ['app',"color","app_name"]

 

img

标签:__,name,models,app,外键,Django,序列化,class
From: https://www.cnblogs.com/regit/p/17108787.html

相关文章

  • Django-ORM
    ORM由来让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业务逻辑层面,......
  • docker搭建django+mysql
    1.本机项目迁移到linux系统中2.编写dockerfile内容如下 WOEKDIR 在容器中创建该目录COPY 复制本机当前目录下的requirements.txt文件 到容器drfproject......
  • Django生命请求周期
    Django的请求生命周期所谓Django的请求生命周期,直白的来说就是当请求来的时候和请求走的阶段中,Django的执行轨迹。一个完整的Django生命周期:用户从客户端发出一条请求以......
  • windows搭建django开发环境
    windows如何搭建django开发环境pycharm搭建django运行环境虚拟环境搭建前置条件,下载安装python如3.11.1下载安装pycharm社区版下载安装git在gitee上新建用户,搭建......
  • Django框架之drf:8、断点调试,权限、认证、频率组件源码分析,基于APIView编写分页,全局异
    目录Django框架之drf一、断点调式使用1、断点调试二、权限组件源码分析三、认证组件源码分析四、频率组件源码分析1、自定义频率类2、SimpleRateThrottle五、基于APIView编......
  • 【Django drf】认证类 权限类 频率类 过滤类 排序类 分页类
    目录认证类前期准备自定义认证类配置认证类全局配置局部禁用认证组件使用步骤基于类中方法的认证(了解)权限类前期准备重写has_permission()添加权限不足信息权限组件使用......
  • python之路66 drf从入门到成神 7 原生django的cookie+session认证底层原理、认证,权限,
    django的cookie+session认证底层原理==断点调试使用程序是debug模式运行,可以在任意位置停下,查看当前情况下变量数据的变化情况pycharm来调试程序以debug形式运......
  • RedisTemplate配置读取序列化
    配置项publicRedisTemplate<String,Object>redisTemplate(RedisConnectionFactoryfactory){RedisTemplate<String,Object>template=newRedi......
  • RedisTemplate序列化
    1.序列化配置publicRedisTemplate<String,Object>redisTemplate(RedisConnectionFactoryfactory){RedisTemplate<String,Object>template=ne......
  • django中有关登陆验证的LoginRequiredMixin类
      通常情况判断一个用户是否登陆可以使用request.user.is_is_authenticate(),就可以完成,返回结果TRUE或者FALSE classUserCenterInfoView(View):defget(self......