我有一个名为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过滤对象
答案 0 :(得分:1)
您的字段session
是序列化程序字段,而不是模型字段。在DRF中,这些字段通常基于模型数据来计算。
HyperlinkedRelatedField
提供了一种将网址放入响应的简单方法。另一方面,它解析数据太难以用于查询ORM。要按关系过滤,您需要关系所属类型的对象或与主键具有相同类型的值。在你的情况下是一个整数。
要解决您的问题,我建议您使用PrimaryKeyRelatedField
代替HyperlinkedRelatedField
或https://spreadsheets.google.com/feeds/list/1KI1hps-RpAJZV8AkB6MpxO8V_le--111111111/od6/public/values?alt=json
。
看到你的代码,另一个解决方案可能是通过UUID进行过滤,但你没有提供你的模型,所以我可以给出一个合适的代码示例。