代码之家  ›  专栏  ›  技术社区  ›  Rohit Gajula

当有嵌套的序列化程序时,尝试使用poster添加数据

  •  0
  • Rohit Gajula  · 技术社区  · 1 年前

    我有两个模型students和marks,我有一个学生列表,我需要在嵌套的序列化程序类中使用poster添加marks。如何选择已存在的学生?

    Models.py

    class Student(models.Model):
        name = models.CharField(max_length=50, null=False, blank=False)
        roll_no = models.CharField(max_length=5, null=False, blank=False)
        mobile_no = PhoneNumberField(null=False, blank=False, unique=True)
        mail_id = models.EmailField(null=False, blank=False)
    
        def __str__(self):
            return self.name
    
    class Marks(models.Model):
        student = models.ForeignKey(Student, on_delete=models.CASCADE)
        maths = models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(100)])
        science = models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(100)])
        social = models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(100)])
    
        def __str__(self):
            return str(self.student)
    

    序列化程序.py

    class StudentSerializer(serializers.ModelSerializer):
    
        class Meta:
            model = Student
            fields = '__all__'
    
    class MarksSerializer(serializers.ModelSerializer):
    
        student = StudentSerializer()
        class Meta:
            model = Marks
            fields = '__all__'
    

    如果我给字典我正在创建一个新的学生,我不想在上面创建,我想选择现有的学生,如何做到这一点?

    当您有一个嵌套的序列化程序类时,如何通过poster发送数据?

    1 回复  |  直到 1 年前
        1
  •  0
  •   Nasih jzym    1 年前

    如果您希望在添加标记时选择现有学生而不创建新学生,则可以考虑从MarksSerializer中删除StudentSerializer。您可以使用PrimaryKeyRelatedField,该字段允许您使用Student模型的主键来表示关系。这样,当使用Postman创建分数时,您只需要发送学生的主键(或id)。

    序列化程序.py

    从rest_framework导入序列化程序从.models导入Student, 标记

    类StudentSerializer(序列化程序.ModelSerializer):

    class Meta:
        model = Student
        fields = '__all__'
    

    类MarksSerializer(serializers.ModelSerializer):

    student = serializers.PrimaryKeyRelatedField(queryset=Student.objects.all())
    class Meta:
        model = Marks
        fields = '__all__'
    

    通过邮差发送数据:

    要通过Postman发送数据:

    将HTTP方法选择为POST。 输入您尝试访问的API终结点的URL。 转到Body选项卡,选择raw和JSON(application/JSON)。 以以下格式发送数据:

    {
        "student": 1, 
        "maths": 95,
        "science": 89,
        "social": 92
    }
    

    这里,student是现有学生的ID。数学、科学和社会领域是那个学生要加的分数。

    如果你已经正确设置了所有内容,这应该会起作用,它不会创建新的学生,而是通过ID选择现有的学生。