如何在Django modelseriiz中从请求中检索额外的JSON数据

2024-10-01 04:54:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模型序列化程序,它创建一个程序对象,以及另一个OutboundProgram对象。我收到的json包含程序对象的所有细节,以及创建OutboundProgram所需的其他细节。如何检索附加字段,因为序列化程序只读取特定对象的字段。另外,我们的组长不希望我使用嵌套的JSON

请求接收的json:

{
"linkage": "AP",
"name": "something",
"academic_year": 2017,
"terms_available":[1,2],
"is_graduate": false,
"requirement_deadline":"2011-10-16",
"institution": 3
}

你知道吗型号.py你知道吗

class Program(SoftDeletionModel):
    linkage = ForeignKey(Linkage)
    name = CharField(max_length=64)
    academic_year = ForeignKey(AcademicYear)
    terms_available = ManyToManyField(Term)
    is_graduate = BooleanField()

    def __str__(self):
        return self.name


class OutboundProgram(SoftDeletionModel):
    program = ForeignKey(Program)
    requirement_deadline = DateField()
    institution = ForeignKey(Institution)

你知道吗序列化程序.py你知道吗

class OutboundProgramSerializer(ModelSerializer):
    class Meta:
        model = Program
        fields = "__all__"

    def create(self, validated_data):
        terms = validated_data.pop('terms_available')
        program = Program.objects.create(**validated_data)
        for term in terms:
            program.terms_available.add(term)
        program.save()

        outbound_program = OutboundProgram.objects.create(program=program)
        #how to assign outbound_program.requirements_deadline from json
        return program

任何帮助都是有用的。谢谢!你知道吗


Tags: 对象nameself程序json序列化createprogram
2条回答

序列化程序.py 你知道吗

class OutboundProgramSerializer(ModelSerializer):
    requirement_deadline = serializers.DateField(write_only=True)
    institution = serializers.IntegerField(write_only=True)
    class Meta:
        model = Program
        fields = "__all__"

    def create(self, validated_data):
        terms = validated_data.pop('terms_available')
        program = Program.objects.create(**validated_data)
        for term in terms:
            program.terms_available.add(term)
        program.save()

        outbound_program = OutboundProgram.objects.create(program=program)
        outbound_program.requirement_deadline = validated_data.pop('requirement_deadline')
        outbound_program.institution_id = validated_data.pop('institution')
        outbound_program.save()
        return program

尝试使用extra-context

request = self.context['request']
terms = request.data.get('terms_available', [])

相关问题 更多 >