zoukankan      html  css  js  c++  java
  • 备份问题-原生问题

    class SerialierTeacherClass(serializers.ModelSerializer):
    
        teacher_ids=serializers.ListField(
            child=serializers.IntegerField(),allow_empty=False
            ,write_only=True
        )
    
        classid=serializers.SerializerMethodField(read_only=True)
        teacher_id=serializers.SerializerMethodField(read_only=True)
        class Meta:
            model = models.TeacherClass
            fields = ["class_id","teacher_id","teacher_ids","classid"]
            extra_kwargs={
                "teacher_id":{"read_only":True},
                "class_id":{"write_only":True}
            }
    
        def get_classid(self,queryset):
            if isinstance(queryset,list):
                sets=set()
                for obj in queryset:
                   sets.add(obj.class_id)
                return list(sets)
        def get_teacher_id(self,queryset):
            if isinstance(queryset,list):
                sets=set()
                for obj in queryset:
                   sets.add(obj.teacher_id)
                return list(sets)
    
    
    
    
    
        def create(self, validated_data):
           # todo  default for  update  args ,**kwargs is for filter
           teacher_ids=validated_data.pop("teacher_ids")
           bulks=[]
           for teacher_id in teacher_ids:
              teacher_class_object=TeacherClass(teacher_id=teacher_id,**validated_data)
              bulks.append(teacher_class_object)
           objs=TeacherClass.objects.bulk_create(bulks)
           return objs
    

     

    模型:

    class  TeacherClass(models.Model):
        teacher_id =models.IntegerField(max_length=200)
        class_id =models.IntegerField()
        is_delete = models.BooleanField(default=False)
    
        class Meta :
            db_table="tbl_teacher_class"
            verbose_name="老师表"
            # unique_together=("class_id","teacher_id")
    

     

    第二种:

    以list形式存储某个字段:

    比如前端传参数老师id为数组存在tbl_teacher_class:

    {
        "teacher_ids": [1,2],
        "class_id": 1
    }
    class SerialierTeacherClass(serializers.ModelSerializer):
    
        teacher_id=serializers.ListField(
            child=serializers.IntegerField(),allow_empty=False
    
        )
        class Meta:
            model = models.TeacherClass
            # fields = ["class_id","teacher_id","teacher_ids","classid"]
            fields = ["class_id", "teacher_id"]
            extra_kwargs={
    
            }
    
    
        def create(self, validated_data):
           # todo  default for  update  args ,**kwargs is for filter
           obj,created_status=TeacherClass.objects.update_or_create(defaults=validated_data,**validated_data)
           return obj
    

     模型:


    class TeacherClass(models.Model):
    teacher_id =models.CharField(max_length=100)
    class_id =models.IntegerField()
    is_delete = models.BooleanField(default=False)

    class Meta :
    db_table="tbl_teacher_class"
    verbose_name="老师表"
    # unique_together=("class_id","teacher_id")

     

    relation关联减少重复数据问题:

    class SerializerTeacher(serializers.ModelSerializer):
        class Meta:
            model = models.Teacher
            fields = "__all__"
    
    
    class SerializerStudent(serializers.ModelSerializer):
        """
        # serializers_class=SerializerClass(instance=class_object,many=False)
        # res.append(serializers_class.data)
        """
        user_sex = serializers.CharField(source="get_sex_display", read_only=True)
        class_info = serializers.SerializerMethodField(read_only=True)
        teachers = serializers.SerializerMethodField(read_only=True)
    
        class Meta:
            model = models.Student
            fields = ["id", "class_id", "sex", "class_info", "user_sex", "name", "teachers"]
            extra_kwargs = {
                "id": {"read_only": True},
                "sex": {"write_only": True},
                "is_delete": {"write_only": True}
            }
    
        def get_class_info(self, object):
            class_queryset = models.Class.objects.filter(id__exact=object.class_id).all()
            res = [class_object.cname for class_object in class_queryset]
            return res
    
        def get_teachers(self, object):
            teacher_ids = TeacherClass.objects.filter(class_id__exact=object.class_id).all().values("teacher_id")
            # todo can filter by  queryset
            teacher_queryset = models.Teacher.objects.filter(id__in=teacher_ids).all()
    
            res = [item.tname for item in teacher_queryset]
            return res
    
    
    class SerializerClass(serializers.ModelSerializer):
        class Meta:
            model = models.Class
    
            fields = ["id", "cname", "create_time", "update_time", "is_delete"]
            extra_kwargs = {
                "id": {"read_only": True},
                "is_delete": {"write_only": True},
    
            }
    
    
    
    class  SerialierTeacherClass(serializers.ModelSerializer):
    
        class Meta:
            model = models.TeacherClass
            fields = ["class_id", "teacher_id"]
    
    
        def create(self, validated_data):
            obj,is_create=TeacherClass.objects.get_or_create(defaults=validated_data,**validated_data)
            return obj
    

     

    模型:

    from django.db import models
    
    
    class Teacher(models.Model):
        tname=models.CharField(max_length=30,error_messages={"required":True},unique=True)
        address=models.CharField(200,max_length=100)
        age=models.IntegerField(default=18)
        is_delete=models.BooleanField(default=False)
        class Meta :
            db_table="tbl_teacher"
            verbose_name="老师表"
    
    class Class(models.Model):
        cname = models.CharField(max_length=32,unique=True)
        create_time= models.DateField(auto_now_add=True,null=True)
        update_time=models.DateField(auto_now=True,null=True)
        is_delete=models.BooleanField(default=False)
    
    
        def __str__(self):
            return self.cname
    
        class Meta :
            db_table="tbl_class"
            verbose_name="老师表"
    
    class Student(models.Model):
        """ 注意一对一反向查询和多对一有区别"""
        name = models.CharField(max_length=32,unique=True)
        sex_choice=[(0,"男"),(1,"女")]
        sex=models.IntegerField(choices=sex_choice,verbose_name="性别",error_messages={"required":True})
        class_id =models.PositiveIntegerField()
        is_delete=models.BooleanField(default=False)
    
        class Meta :
            db_table="tbl_student"
            verbose_name="学生表"
    
    class  TeacherClass(models.Model):
        teacher_id =models.IntegerField(max_length=100)
        class_id =models.IntegerField()
        is_delete = models.BooleanField(default=False)
    
        class Meta :
            db_table="tbl_teacher_class"
            verbose_name="老师表"
            # unique_together=("class_id","teacher_id")
    


  • 相关阅读:
    “main cannot be resolved or is not a field”解决方案
    .net学习笔记----有序集合SortedList、SortedList<TKey,TValue>、SortedDictionary<TKey,TValue>
    MVC学习笔记---ModelBinder
    MVC学习笔记---MVC框架执行顺序
    服务器知识----IIS架设问题
    C/C++学习笔记---primer基础知识
    C/C++学习笔记----指针的理解
    C#学习笔记-----C#枚举中的位运算权限分配
    CSS学习笔记----CSS3自定义字体图标
    Clr Via C#读书笔记----基元线程同步构造
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/13870358.html
Copyright © 2011-2022 走看看