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

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

时间:2023-12-09 10:55:55浏览次数:31  
标签:__ name models app 外键 Django 序列化 class

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

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/17890630.html

相关文章

  • JAVA自定义对象序列化,自定义的控制每个字节的序列化情况
    在java中,正常来说序列化是可以直接继承Serializable,或使用类似于fastjson,protobuf等框架。但是这些框架对于二进制协议,自定义协议,私有协议方面却不太好使,私有协议大多还是按照字节的方式组织数据,对于java来说需要控制每个属性的序列化方式,所以这块主要还是以传统的方式,读字节......
  • django如何远程查询多对多字段?
    解决办法假设A表有一个多对多properties字段,通过A表远程查询properties的名称qs=A.objects.filter(properties__name=xxx)更复杂的:A表有一个外键字段version连接B表,B表有一个多对多字段properties,通过A表远程查询properties的名称qs=A.objects.filter(version__proper......
  • 使用django连接MySQL
    使用python311+pycharm社区版+MySQL80,使用django连接MySQL1.下载1.1.官网下载pythonhttps://www.python.org/downloads/如我的python3.11.4,可以进入如下的页面进行hash校验https://www.python.org/downloads/release/python-3114/1.2.官网下载pycharmhttps://www.......
  • Windows服务器,通过Nginx部署VUE+Django前后端分离项目
    目录基本说明安装Nginx部署VUE前端部署Django后端Djangoadmin静态文件(CSS,JS等)丢失的问题1.基本说明本文介绍了在windows服务器下,通过Nginx部署VUE+Django前后端分离项目。本项目前端运行在80端口,服务器端运行在8000端口。因此本项目使用Django的......
  • 【机器学习】Django,余弦距离之基于用户,评分物品的推荐
    表设计#用户表classUserInfo(models.Model):username=models.CharField(max_length=32,unique=True,verbose_name="用户名")password=models.CharField(max_length=64)#物品表classMovies(models.Model):name=models.CharField(max_length=255,v......
  • Python的json序列化模块
    一、jsonJson模块提供了四个功能:dumps、dump、loads、load1、前景什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。序列化的目的以某种存储形式使自定义对象持久化;将对象从一个地方传递到另一个地方。使程序更具维护性在Python中,能够......
  • vue-django 前端bootstrap配置
    2、前端引入bootstrap下载bootstrap源码,放在vue中的src目录中https://v5.bootcss.com/docs/getting-started/download/https://getbootstrap.net/docs/getting-started/introduction/在vue根目录修改main.jsimport{createApp}from'vue'importAppfrom'./App.vue'im......
  • Django高级特性:django-apscheduler定时任务
     前言:在使用Django框架开发web项目时,很多时候需要设置定时任务或让用户手动在页面上设置定时任务在Django中实现定时任务功能大概有以下三种方法:Celery分布式任务队列。侧重实时操作,可用于生产系统处理数以百万计的任务,都用于大型项目,配置和使用较为复杂。由于它本身......
  • Django ORM 多表操作:一对一、一对多、多对多的增删改查 (二)
    DjangomodelORM数据表相关操作分析思路,创建数据表对于表操作,表之间的关联关系,必须理解他们之间的关系,对于编程很重要。可以看看映射关系、外键和relationship查询,至少明白外键相关基本知识。下面是简单的demo1.创建数据模型models.py文件,fromdjango.dbimportmodels#Cre......
  • Java反序列化 CC7链
    参考链接https://blog.csdn.net/qq_35733751/article/details/119862728https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/CommonsCollections7.javahttps://y0n3er.github.io/undefined/45911.html环境搭建CommonsCollections3.2.1JD......