2017-11-23 1 views
0

제목을 용서하십시오. Im 다만 확실히 보여주는없이이 질문을 묻는 확실히 확실히.djangrestframework 외래 키로 모델을 표시하려면

django에는 두 가지 모델이 있습니다.

class people(models.Model): 
    name=models.TextField(max_length=100) 
    nickname=models.TextField(max_length=100) 

class visits(models.Model): 
    person=models.OneToOneField(people) 
    visitdate=models.DateTimeField(auto_now=True) 

다음 restapi에 대한 serializer.

#serializers.py 

class VisitsSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = visits 
     fields=("id","person","date") 

API가 사전을 반환하면 다음과 같이 보입니다.

{id:1,person:1,visitdate:11/23/17} 

id가 1 인 사람과 관련된 실제 값을 API가 반환하도록 할 수있는 방법이 있습니까? 그렇게.

{id:1,person:{id:1,name:foo,nickname:bar},visitdate:11/23/17} 

답변

2

보십시오 사람들을위한 시리얼 클래스를 만든 다음 방문 시리얼이 추가 : 메타 클래스의 필드에 다음

people = PeopleSerializer(read_only = True) 

그것은 (사람)를 추가, 단지 제안 만드는 시도 OnetoOne 관계가 아닌 외래 키

+0

모두 큰 응답하지만 외래 키가 수정을했다. 감사 – Philip556677

1

중첩 된 관계로 할 수 있습니다. 중첩 된 시리얼에

class PersonSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = people 
     fields = ('name', 'nickname') 

class VisitsSerializer(serializers.ModelSerializer): 

    person = PersonSerializer(read_only=True) 

    class Meta: 
     model = visits 
     fields = ("id", "person", "date") 

문서가 here입니다 예를 들면 다음과 같습니다.

0

다음과 같이 대응 시리얼은 다음과 같습니다

class PersonSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = people 


class VisitsSerializer(serializers.ModelSerializer): 
    person = serializers.SerializerMethodField() 

    class Meta: 
     model = visits 
     fields = ('id', 'person', 'date') 

    def get_person(self, obj): 
     return PersonSerializer(obj.person).data