【发布时间】:2021-12-28 06:29:49
【问题描述】:
我试图显示外键字段名称而不是对象 ID,但无法通过它。尝试使用related_name,然后将其绑定到序列化程序,但仍然没有运气,
models.py
class Employee(base_models.BaseDateModel):
"""
DB model to store employee data
"""
name = models.CharField(max_length=50)
level = models.SmallIntegerField(choices=LEVEL_CHOICES, default=L1)
def __str__(self):
return f'{self.name} - {self.get_level_display()}'
class Room(base_models.BaseDateModel):
"""
DB model to store available rooms in the building
"""
name = models.CharField(max_length=15)
def __str__(self):
return f'{self.name}'
class Seat(base_models.BaseDateModel):
"""
DB model to store available seats in a given room
"""
room = models.ForeignKey('seating.Room', on_delete=models.CASCADE)
def __str__(self):
return f'{self.room} - {self.id}'
class EmployeeSeating(base_models.BaseDateModel):
"""
DB model to store the seating details of any employee
"""
name = models.ForeignKey('seating.Employee', on_delete=CASCADE, related_name='emp_name')
room = models.ForeignKey('seating.ROOM', on_delete=CASCADE, related_name='emp_room')
seat = models.ForeignKey('seating.SEAT', on_delete=CASCADE, related_name='emp_seat')
def __str__(self):
return f'{self.name} - {self.room} - {self.seat}'
serializers.py
class EmployeeSeatingSerializer(serializers.ModelSerializer):
emp_name = serializers.StringRelatedField()
emp_room = serializers.StringRelatedField()
emp_seat = serializers.StringRelatedField()
class Meta:
model = EmployeeSeating
fields = ('id', 'emp_name', 'emp_room', 'emp_seat')
views.py
def listemp_api(request, pk=None):
"""
Method to return the list of employee in a given room
"""
if request.method == 'GET':
room_id = pk
if room_id:
employee_data = EmployeeSeating.objects.filter(room_id = room_id)
serializer = EmployeeSeatingSerializer(employee_data, many=True)
return Response(serializer.data)
else:
employee_data = EmployeeSeating.objects.all()
print(employee_data)
serializer = EmployeeSeatingSerializer(employee_data, many=True)
return Response(serializer.data)
使用我的视图查询集的结果如下
[
{
"id": 1
},
{
"id": 2
},
{
"id": 5
}
]
但我想要使用 stringfield 添加但无法实现的房间、座位和其他序列化字段。
使用fields = '__all__' 给了我对象编号,但错过了我想要的其他字段,即。 emp_room、emp_name 等
【问题讨论】:
标签: python django serialization django-rest-framework