如何通过超链接相关字段过滤django中的对象

时间:2016-08-14 01:29:40

标签: python django

我有一个名为car的模型,其中包含属性session,这是一个HyperLinkRelatedField

我正在尝试通过超链接相关字段过滤对象

我试过这样的事情:

session_url = "http://localhost:8000/v1/sessions/"+uuid+"/"
print cars.objects.filter(session=session_url)

我收到了这个错误:

ValueError: invalid literal for int() with base 10: 'http://localhost:8000/v1/sessions/4c597c05-5e66-11e6-a79c-9801a78ed96d/'

问题是,会话绝对不是整数,所以我无法理解为什么会发生这种情况

这是我的序列化程序的外观

class CarSerializer(serializers.Serializer):
    altitude = serializers.FloatField()
    course = serializers.FloatField()
    session = serializers.HyperlinkedRelatedField(
        many=False,
        queryset=Session.objects.all(),
        view_name="session-detail",
        lookup_field="uuid"
    )
    timestamp = serializers.DateTimeField(required=False)

为什么这不起作用?如果它是错的,那么我们如何通过django中的HyperLink过滤对象

1 个答案:

答案 0 :(得分:1)

您的字段session是序列化程序字段,而不是模型字段。在DRF中,这些字段通常基于模型数据来计算。 HyperlinkedRelatedField提供了一种将网址放入响应的简单方法。另一方面,它解析数据太难以用于查询ORM。要按关系过滤,您需要关系所属类型的对象或与主键具有相同类型的值。在你的情况下是一个整数。

要解决您的问题,我建议您使用PrimaryKeyRelatedField代替HyperlinkedRelatedFieldhttps://spreadsheets.google.com/feeds/list/1KI1hps-RpAJZV8AkB6MpxO8V_le--111111111/od6/public/values?alt=json

看到你的代码,另一个解决方案可能是通过UUID进行过滤,但你没有提供你的模型,所以我可以给出一个合适的代码示例。