DRF-非模型序列化器中的外键

时间:2018-08-22 16:17:21

标签: django-rest-framework serializer

我有一个看起来像这样的非模型序列化器:

class NonModelSerializer(Serializer):
    secret_number = IntegerField()
    user = ???

    def save(**kwargs):
        ... do something with the secret number and user ...

应该写些什么代替???,以便我的序列化程序接受用户的ID,并在save()方法中,我在user字段中看到给定ID的用户?像是来自纯Django的ModelChoiceField

1 个答案:

答案 0 :(得分:1)

您应该使用PrimaryKeyRelatedField

class NonModelSerializer(serializers.Serializer):

    user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
    secret_number = serializers.IntegerField()

    class Meta:
        fields = ('user', 'secret_number')

    def create(self, validated_data):
        print(self.validated_data)
    pass

    def update(self, instance, validated_data):
        pass

我建议您覆盖createupdate而不是save,但是您也可以通过save访问self.validated_data中的选定用户。