Django rest框架反向关系序列化器排除字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django rest框架反向关系序列化器排除字段相关的知识,希望对你有一定的参考价值。

我有两个型号QuestionOptions

class Question(models.Model):
    question_identifier = models.CharField(max_length=255)
    question_text = models.TextField(blank=False)
    question_category = models.ManyToManyField('Category')
    question_tags = models.CharField(max_length=255, blank=True)

class Options(models.Model):
    question = models.OneToOneField('Question', related_name='options', blank=False, null=False)
    option1 = models.CharField(max_length=255,blank=False,null=True)
    option2 = models.CharField(max_length=255,blank=False,null=True)
    option3 = models.CharField(max_length=255,blank=True,null=True)
    option4 = models.CharField(max_length=255,blank=True,null=True)

我已经为Question模型编写了一个序列化器,它也可以序列化选项(反向关系)。我想省略选项中的问题字段?有没有办法实现这个目标?

我的问题序列化器: -

class QuestionSerializer(serializers.ModelSerializer):
    """
    Serializer for Question object from qna.models
    """
    question_category = CategorySerializer(many=True,write_only=True)

    class Meta:
        model = Question
        fields = ('id', 'options', 'question_identifier','question_text','question_tags','question_category')
        depth = 1
答案

您可以通过为Options模型创建单独的序列化程序来实现这一目的。并使用它而不是默认字段,而不使用depth值。

class OptionsSerializer(serializers.ModelSerializer):

    class Meta:
        model = Options
        fields = ('option1', 'option2', 'option3')

class QuestionSerializer(serializers.ModelSerializer):
    question_category = CategorySerializer(many=True,write_only=True)
    options = OptionsSerializer()

    class Meta:
        model = Question
        fields = ('id', 'options', 'question_identifier','question_text','question_tags','question_category')

以上是关于Django rest框架反向关系序列化器排除字段的主要内容,如果未能解决你的问题,请参考以下文章

django rest 框架:从序列化器 validate() 方法设置字段级错误

如何获取主键相关字段嵌套序列化器django rest框架的所有值

Django rest框架 - 模型序列化程序不会序列化所有字段

如何在 django rest 框架中为枚举字段创建序列化程序

通过django rest框架序列化器添加外键数据

Django Rest框架:序列化程序上的共享字段