2015-01-06 50 views
1

我有一个PersonProfile类和一个Person类。 在课堂上,我与PersonProfile有一个关系OneToOne。 我如何序列化?如何使用Rest Framework序列化Django中的关系OneToOne?

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") 

回答

5

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

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 
       ) 

您还可以使用serializers.ModelSerializer

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

事实上,我想知道如何序列化参考OneToOne,我认为这是在ProfilePerson。 赞... ProfilePerson有一个人...或者我错了吗? –

+0

对于我的其他类使用serializers.ModelSerializer –

+0

看看这样: https://gist.github.com/anonymous/7463dce5b0bfcf9b6767 其正确吗? –

1

我最近在类似的东西绊了一跤,这里是我做了序列化的人,这与PersonProfile OneToOne关系。

class PersonPorfileSerializer(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 
相关问题