zoukankan      html  css  js  c++  java
  • 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")
    

     

    DRF 实现:

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

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

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

     

     

     现在需求查询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"]
    

     

  • 相关阅读:
    多线程 之 NSOperation
    用图像列表播放动画
    视图的动画技术
    自定义软键盘
    UITableView_取消UITableViewCell选择的样式
    UIScrollView 用法
    判断程序运行的设备类型IPad
    修改屏幕的旋转方向,使用与IPHONE以及IPad
    体验Windows XP系统中的网络视频会议
    Sidekiq in Rails
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/14042914.html
Copyright © 2011-2022 走看看