Tôi đang sử dụng DRF để hiển thị một số điểm cuối API.Django Rest Framework trả về đối tượng lồng nhau bằng cách sử dụng PrimaryKeyRelatedField
# models.py
class Project(models.Model):
...
assigned_to = models.ManyToManyField(
User, default=None, blank=True, null=True
)
# serializers.py
class ProjectSerializer(serializers.ModelSerializer):
assigned_to = serializers.PrimaryKeyRelatedField(
queryset=User.objects.all(), required=False, many=True)
class Meta:
model = Project
fields = ('id', 'title', 'created_by', 'assigned_to')
# view.py
class ProjectList(generics.ListCreateAPIView):
mode = Project
serializer_class = ProjectSerializer
filter_fields = ('title',)
def post(self, request, format=None):
# get a list of user.id of assigned_to users
assigned_to = [x.get('id') for x in request.DATA.get('assigned_to')]
# create a new project serilaizer
serializer = ProjectSerializer(data={
"title": request.DATA.get('title'),
"created_by": request.user.pk,
"assigned_to": assigned_to,
})
if serializer.is_valid():
serializer.save()
else:
return Response(serializer.errors,
status=status.HTTP_400_BAD_REQUEST)
return Response(serializer.data, status=status.HTTP_201_CREATED)
Tất cả đều hoạt động tốt và tôi có thể ĐĂNG danh sách id cho trường được chỉ định. Tuy nhiên, để thực hiện chức năng này, tôi phải sử dụng PrimaryKeyRelatedField
thay vì RelatedField
. Điều này có nghĩa là khi tôi thực hiện GET
thì tôi chỉ nhận được các khóa chính của người dùng trong trường assigned_to
. Có cách nào để duy trì hành vi hiện tại cho POST
nhưng trả lại chi tiết User
được tuần tự hóa cho trường assigned_to
không?
Vì vậy, tôi đã cố gắng trọng phương pháp get_serializer_class(): 'def get_serializer_class (tự): print self.request.method; nếu self.request.method == "GET": ... 'nhưng yêu cầu luôn là' GET', ngay cả khi tôi thấy một 'POST' trong máy chủ lưu trữ. –