Использование отношений сериализатора, особенно вложенных отношений - PullRequest
0 голосов
/ 07 апреля 2020

Я использую DRF для сопоставления отношения внешнего ключа для предоставления данных из другой таблицы всякий раз, когда я выполняю GET. Следуя примеру документации, я структурировал свой код следующим образом:

ps: я знаю, что есть другие вопросы с этим сомнением, но при анализе большинства из них не удалось решить мою проблему. Извините, если выглядит как дубликат

model.py

class Employee(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    employee_code = models.CharField(max_length=100, primary_key=True)
    name = models.CharField(max_length=100, default='')
    last_name = models.CharField(max_length=100, default='')
    history = HistoricalRecords()

    def __str__(self):
        return "{}_{}".format(self.name, self.last_name)

class Sectors(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    employees = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name="business")
    sector_name = models.CharField(default = 0)    
    history = HistoricalRecords()

serializer.py

class EmployeeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Employee
        fields = ('url','employee_code','name','last_name')
        read_only_fields = ('created_at', 'updated_at',)    

class SectorsSerializer(serializers.ModelSerializer):
    employee = EmployeeSerializer(many=False, read_only=True)
    class Meta:
        model = Sectors
        fields= ("url","employees","sector_name","employee")
        read_only_fields = ('created_at', 'updated_at')

views.py

@api_view(['POST','PUT','GET'])
def post_sectors(request):       
    # Deserialize the information provided in the request
    ser = SectorsSerializer(data=request.data)
    # Validate the information provided
    ser.is_valid(raise_exception=True)
    # Save the information in the datawarehouse
    ser.save()
    return Response(status=status.HTTP_200_OK)


class EmployeeViewSet(viewsets.ModelViewSet):
    queryset = Employee.objects.all()
    serializer_class = EmployeeSerializer

class SectorsViewSet(viewsets.ModelViewSet):
    queryset = Sectors.objects.all()
    serializer_class = SectorsSerializer

Я ожидал что-то вроде этого:

{
"url": "http://127.0.0.1:8000/employe/1/",
"employees": 2134,
"sector_name": 23012020,
"employee": "191_A"[
    "employee_code":12,
    "name": "Jhon",
    "last_name":"Spencer"
]
},

Но вот что мне возвращается:

}
"url": "http://127.0.0.1:8000/employe/1/",
"employees": 2134,
"sector_name": 23012020
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...