如何正确使用serializers.SlugRelatedField?
我的代码看起来像这样,但出现错误...
有完整的错误:
django.core.exceptions.FieldError:无法将关键字“department_name”解析为字段。选项包括:徽章、created_at、department、department_id、gender、id、name、position、position_id、updated_at
型号代码:
class Employee(models.Model):
GENDER_CHOICES = (
('Male', 'Male'),
('Female', 'Female'),
)
name = models.CharField(max_length=100)
badge = models.CharField(max_length=6, unique=True)
gender = models.CharField(max_length=20, choices=GENDER_CHOICES)
department = models.ForeignKey(
Department, on_delete=models.CASCADE, null=True)
position = models.ForeignKey(
Position, on_delete=models.CASCADE, null=True)
updated_at = models.DateTimeField(auto_now=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'{self.name} - {self.badge}'
序列化器代码
from rest_framework import serializers
from .models import Employee
class EmployeeSerializer(serializers.ModelSerializer):
department = serializers.SlugRelatedField(
slug_field='department_name', queryset=Employee.objects.all())
# position = serializers.SlugRelatedField(
# slug_field='position_name', queryset=Employee.objects.all()
class Meta:
model = Employee
fields = '__all__'
在您的序列化器代码中,执行以下操作
slug_field='department', queryset=Employee.objects.all())
这是因为你的“Employee”模型类中没有任何名为“department_name”的字段。
您确定 SlugFiled 是最佳选择吗?
要获取部门名称,您可以使用:
department = serializers.CharField(source="department.department_name")
但是你的部门 FK 可以为空,这会更好:
class EmployeeSerializer(serializers.ModelSerializer):
department = serializers.SerializerMethodField()
class Meta:
model = Employee
fields = '__all__'
@staticmethod
def get_department(obj):
return obj.department.department_name if obj.department else None