繁体   English   中英

序列化程序关系在 Django Rest 框架中不起作用

[英]Serializer Relations Doesn't Work in Django Rest Framework

我的应用程序中有两个模型。 这是我在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 显示来自员工 model 的数据及其 JSON 格式的部门名称。 但是 API 没有显示strDivisionName字段。 它仅显示来自Employee model 的字段。 谁能解释我的问题及其解决方案? 我还是 Django Rest Framewrok 的新手。 之前谢谢

使用以下代码更新您的序列化程序:

from rest_framework import serializers
from .models import TblEmployee,TblDivision

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

在字段中,您显示错误的字段名称。 这是strdivisionname不是strDivisionName

我的朋友,您在序列化程序代码中犯了一个错误:您必须提供与您在模型中输入的名称完全相同的名称(在您编写的模型中:'strdivisionname' 和在序列化程序中:'strDivisionName')

因为您使用 EmployeeSerializer 序列化您的 TblEmployee 实例,并且在您的 EmployeeSerializer 中没有任何 strdivisionname 字段? 你必须在你的模型中制作一个foreignKey,对吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM