kullanarak iç içe nesneye geri dön Bazı API uç noktalarını açığa çıkarmak için DRF kullanıyorum.Django Rest Framework, NestKeyRelatedField
# 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)
Her şey düzgün çalışıyor ve alana atanan kimliğin listesini listeleyebilirim. Ancak, bu işlevi yapmak için RelatedField
yerine PrimaryKeyRelatedField
kullanmak zorunda kaldım. Bu, GET
yaptığımda, yalnızca kullanıcının birincil anahtarlarını assigned_to
alanına aldığım anlamına gelir. POST
için geçerli davranışı sürdürmenin bir yolu var, ancak assigned_to
alanı için seri hale getirilmiş User
ayrıntılarını döndürüyor musunuz?
Yani, get_serializer_class() yöntemini geçersiz çalıştı: 'def get_serializer_class (self): Baskı self.request.method; eğer self.request.method == "GET": ... 'ama istek her zaman" GET ", koşucuda bir" POST "görsem bile. –