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

wnrlj8wa  于 8个月前  发布在  Postman
关注(0)|答案(1)|浏览(54)

我有两个模型,学生和标记,我有一个学生列表,我需要在嵌套的序列化程序类中使用postman添加标记。如何选择现有的学生?
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)

Serializers.py

class StudentSerializer(serializers.ModelSerializer):

    class Meta:
        model = Student
        fields = '__all__'

class MarksSerializer(serializers.ModelSerializer):

    student = StudentSerializer()
    class Meta:
        model = Marks
        fields = '__all__'

如果我给予字典我正在创建新的学生,我不想创建上我想选择现有的学生,我怎么能这样做?
当你有一个嵌套序列化程序类时,如何通过postman发送数据?

jv4diomz

jv4diomz1#

如果您希望在添加标记时选择现有学生,而不是创建新学生,则可以考虑从MarksSerializer中删除StudentSerializer。您可以使用PrimaryKeyRelatedField,它允许您使用Student模型的主键表示关系。这样,当使用Postman创建标记时,您只需要发送学生的主键(或ID)。
Serializers.py
from rest_framework import serializers from .models import学生,标记
class StudentSerializer(serializers.ModelSerializer):

class Meta:
    model = Student
    fields = '__all__'

class MarksSerializer(serializers.ModelSerializer):

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

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

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

在这里,student是现有学生的ID。数学、科学和社会领域是该学生要加的分数。
如果您已经正确设置了一切,这应该工作,它不会创建一个新的学生,但选择一个现有的ID。

相关问题