Отношения сериализатора не работают в Django Rest Framework - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть две модели в моем приложении. Вот мой код в models.py:

from django.db import models

class TblDivision(models.Model):
    strdivisionname = models.CharField(db_column='strDivisionName', max_length=35, blank=True, null=True)  # Field name made lowercase.

    class Meta:
        db_table = 'Tbl_Division'

class TblPosition(models.Model):
    strpositionname = models.CharField(db_column='strPositionName', max_length=30, blank=True, null=True)  # Field name made lowercase.

    class Meta:
        db_table = 'Tbl_Position'

class TblEmployee(models.Model):
    strname = models.CharField(db_column='strName', max_length=70, blank=True, null=True)  # Field name made lowercase.
    stremployeeid = models.CharField(db_column='strEmployeeID', max_length=10, blank=True, null=True)  # Field name made lowercase.
    bitactive = models.BooleanField(db_column='bitActive', blank=True, null=True)  # Field name made lowercase.
    intdivision = models.ForeignKey(TblDivision, db_column='intDivision',related_name='division', on_delete=models.CASCADE)
    intposition = models.ForeignKey(TblPosition, db_column='intPosition',related_name='position', on_delete=models.CASCADE)

    class Meta:
        db_table = 'Tbl_Employee'

Это мой код в serializer.py:

from rest_framework import serializers
from .models import TblEmployee,TblDivision

class DivisionSerializer(serializers.ModelSerializer):
    class Meta:
        model = TblDivision
        fields=['id','strDivisionName']     


class EmployeeSerializer(serializers.ModelSerializer):
    division = DivisionSerializer(many=True, read_only=True)

    class Meta:
        model = TblEmployee
        fields=['id','strname','stremployeeid','intdivision','division']        

А это мой views.py:

from .models import TblEmployee
from .serializer import EmployeeSerializer,DivisionSerializer

from rest_framework import status
from rest_framework.response import Response
from rest_framework.decorators import api_view

@api_view(["GET", ])

def api_list_employee_view(request):
    try:
        employee_list = TblEmployee.objects.all()
    except TblEmployee.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method == "GET":
        serializer = EmployeeSerializer(employee_list, many="true") 
        dataEmployee = serializer.data
        return Response(dataEmployee)

Я хочу создать простой API, который отображает данные из модели Employee и имя ее подразделения в формате JSON. Но API не показывает поле strDivisionName. Показывает только поле из Employee модели. Кто-нибудь может объяснить мою проблему и ее решение? Я все еще новичок в Django Rest Framewrok. Спасибо, прежде чем

Ответы [ 3 ]

0 голосов
/ 12 апреля 2020

друг мой, ты ошибся в коде сериализатора! Вы должны предоставить точно такое же имя, которое вы ввели в своих моделях (в моделях, которые вы написали: 'strdivisionname' и в сериализаторе: 'strDivisionName')

0 голосов
/ 12 апреля 2020

потому что вы сериализуете свой экземпляр TblEmployee с EmployeeSerializer! и в вашем EmployeeSerializer нет никаких полей strdivisionname! Вы должны сделать иностранный ключ из этого в своих моделях, я прав?

0 голосов
/ 12 апреля 2020

Обновите ваш сериализатор с помощью этого кода:

from rest_framework import serializers
from .models import TblEmployee,TblDivision

class DivisionSerializer(serializers.ModelSerializer):
    class Meta:
        model = TblDivision
        fields=['id','strdivisionname']   

В полях отображается неправильное имя поля. Это strdivisionname not strDivisionName .

...