【发布时间】:2019-03-04 05:00:16
【问题描述】:
我有一个时间 obj 序列化为 DRF。
型号:
class Time(TimeStampedModel):
user = models.ForeignKey(
'users.User', on_delete=models.CASCADE, related_name='time_logs')
amount = models.DurationField()
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
序列化器:
class TimeSerializer(serializers.ModelSerializer):
user = serializers.HiddenField(default=serializers.CurrentUserDefault())
class Meta:
model = Time
fields = ('__all__')
extra_kwargs = {'date_created': {'read_only': True}, 'date_updated': {'read_only': True}}
视图集:
class UserTimeViewSet(viewsets.ModelViewSet):
serializer_class = TimeSerializer
queryset = Time.objects.all()
def get_queryset(self):
return Time.objects.filter(user=self.request.user)
网址
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'users/time', UserTimeViewSet)
这给了我一个端点:/users/time/{id} 其中 {id} 是 Time obj id。当我尝试将端点修改为相同的 url 路由,而是通过覆盖序列化程序和 ViewSet 上的lookup_field 将用户 ID 作为 arg 传递给它(仅获取该用户的时间)时,我要么得到响应错误,要么得到 @ 987654328@
class UserTimeViewSet(viewsets.ModelViewSet):
serializer_class = TimeSerializer
queryset = Time.objects.all().select_related('user')
lookup_field = 'user'
也试过了:
class UserTimeViewSet(generics.ListAPIView):
serializer_class = TimeSerializer
def get_queryset(self):
user = self.kwargs['user']
return Time.objects.filter(user=user)
如何通过用户 ID 获取与用户的关系的时间?
【问题讨论】:
-
那么,您想输入
user_id并检索Time对象....对吗? -
@JPG 是的,我想输入 user_id 并取回 Time 对象,由具有该 id 的用户过滤
-
那么,您需要返回时间实例无论登录用户如何?
-
@JPG。是的。假设客户端有一个有效的密钥和权限来提出他们的请求,api.app.com/users/time/<user_id> 应该返回被请求用户的时间对象
-
你所说的"请求用户的时间对象"是什么意思?在
/users/time/端点,您将获得 已登录 用户 的时间对象
标签: django django-models django-rest-framework