如何用Rest框架序列化Django中的关系OneToOne?

如何用Rest框架序列化Django中的关系OneToOne?,django,serialization,django-rest-framework,one-to-one,Django,Serialization,Django Rest Framework,One To One,我有一个班级人员档案,还有一个班级人员。 在班上,我和PersonProfile有一个关系。 我如何将其序列化 class PersonProfile(models.Model): interests = models.CharField(max_length=200, blank=True) researchLines = models.CharField(max_length=200, blank=True) loginName = models.CharField(

我有一个班级人员档案,还有一个班级人员。 在班上,我和PersonProfile有一个关系。 我如何将其序列化

class PersonProfile(models.Model):
    interests = models.CharField(max_length=200, blank=True)
    researchLines = models.CharField(max_length=200, blank=True)
    loginName = models.CharField(max_length=50, blank=True)

class Person(models.Model):
    profile = models.OneToOneField(PersonProfile)
    enviroment = models.ForeignKey(Enviroment, related_name="persons")

您可以创建自定义序列化程序字段来创建自定义PersonSerializer。 您可以添加字段以从
environment
获取值

class PersonSerializer(serializers.HyperlinkedModelSerializer):
    interests = serializers.CharField(source='profile.interests')
    researchLines = serializers.CharField(source='profile.researchLines')
    loginName = serializers.CharField(source='profile.loginName')
    # --- FIELDS FOR enviroment 
    class Meta:
        model = Person
        fields = ('interests', 'researchLines', 'loginName',
                 #-- enviroment fields
                 )
您还可以使用
序列化程序。ModelSerializer

class PersonSerializer(serializers.ModelSerializer):
   #-------------------------

我最近偶然发现了一些类似的东西,下面是我为连载与PersonProfile有着一对一关系的Person所做的工作

class PersonProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = PersonProfile
        fields = __all__  # in your case since you are using all fields.

class PersonSerializer(serializers.ModelSerializer):
    person = PersonProfileSerializer(required=True)
    class Meta:
        model = Person
        fields = __all__

    # Now override the default create method to create a new object.
    # A similar overriding can be done for update as well.
    def create(self, validated_data):
        """
        Make necessary modifications as per your requirements
        """
        person_profile = PersonProfileSerializer.create(PersonProfileSerializer(), validated_data)
        person, created = Person.objects.create(profile=person_profile)
        return person

事实上,我想知道如何序列化引用OneToOne,我认为这是个人的。喜欢ProfilePerson有一个人…还是我错了?对于我的其他类,我使用serializers.modelserializer这样看:它正确吗?是的,它似乎正确。此外,我还编辑了我的答案以使用ModelSerializer。