使用Django Rest Framework为POST有效负载中的外键指定备用值';s通用视图集

使用Django Rest Framework为POST有效负载中的外键指定备用值';s通用视图集,django,django-rest-framework,Django,Django Rest Framework,我需要能够在POST请求的有效负载中指定非外部关系对象的pk/id 我的模型: class Damage(PDAbstractBaseModel): vehicle = models.ForeignKey(Vehicle, related_name='damages', on_delete=models.CASCADE) driver = models.ForeignKey(Driver, related_name=

我需要能够在POST请求的有效负载中指定非外部关系对象的pk/id

我的模型:

class Damage(PDAbstractBaseModel):
    vehicle = models.ForeignKey(Vehicle, related_name='damages',
                                on_delete=models.CASCADE)
    driver = models.ForeignKey(Driver, related_name='damages',
                               null=True, on_delete=models.CASCADE)
    description = models.TextField()
我的看法是:

class VehicleDamageViewSet(mixins.ListModelMixin,
                            mixins.CreateModelMixin,
                            mixins.RetrieveModelMixin,
                            mixins.UpdateModelMixin,
                            mixins.DestroyModelMixin,
                            viewsets.GenericViewSet):
    permission_classes = (permissions.IsAuthenticated, IsDriverOrAbove)
    serializer_class = DamageSerializer
    queryset = Damage.objects.all()
    lookup_field = 'uid'
    lookup_url_kwarg = 'uid'
    lookup_value_regex = '[0-9a-f-]{36}'
    ordering_fields = ['modified', ]
    ordering = ['modified']
    logger = get_logger('VehicleDamageViewSet')

    def get_serializer_context(self):
        return {'request': self.request}

    def get_vehicle(self, vehicle_uid):
        return Vehicle.objects.get(uid=vehicle_uid)

    def get_queryset(self):
        return self.queryset.filter(vehicle__uid=self.kwargs['vehicle_uid'])

    def perform_create(self, serializer):
        return serializer.save(vehicle=self.get_vehicle(self.kwargs['vehicle_uid']))

我的URL.py

... omitted for brevity ...

router = routers.SimpleRouter()
router.register(r'damage/(?P<vehicle_uid>[a-fA-F0-9-]+)', VehicleDamageViewSet)

... omitted for brevity ....
单元测试失败的部分:

        data = {
            # 'driver': self.user.id,
            'driver': self.user.uid,
            'description': 'horn does not work.',
        }

        url = reverse("vehicle:damage-list", kwargs={'vehicle_uid': vehicle_uid})
        # print(f"damage POST {url}\npayload {data}")
        response = self.client.post(path=url, data=data, format="json")
        print(response.status_code)
        print(response.data['driver'][0])
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
如果我指定
'driver':self.user.id,
,但如果我指定
'driver':self.user.uid,
我得到这个输出:

400
Incorrect type. Expected pk value, received str.
我需要更改什么才能使用
self.user.uid
而不是
self.user.id

如果您能帮忙,我们将不胜感激

400
Incorrect type. Expected pk value, received str.