我无法使用SlugRelatedField
反序列化属于unique_together
集的字段。
举个例子,我有一个博客模型,其中包含标题和作者。 这些元组的元组唯一地标识博客(如标题中对于给定的作者是唯一的,但不是唯一的站点范围)。我想从包含这些值的消息中查找博客。
为了反序列化消息(即from_native
),SlugRelatedField
调用:self.queryset.get(**{self.slug_field: data})
将在Title slug上失败,因为它不是全局唯一的。这可以通过提供更有限的查询集(即只包含博客但该用户的查询集)来解决,但我不确定在字段中设置此查询集的最佳位置是什么/哪里(因为我不知道作者直到我开始反序化那个领域。)
一个想法是在get_fields中对作者进行自己的反序列化,然后我可以过滤Blog的查询集。这段代码非常丑陋,可能会导致Author的反序列化两次,并且在将Serializer用于列表视图时(而不是详细视图)会出现问题。
答案 0 :(得分:0)
您需要在运行时为字段设置QuerySet。
您可以在序列化程序中执行此操作,例如:
class MyObjectSerializer(serializers.HyperlinkedModelSerializer):
def get_fields(self, *args, **kwargs):
fields = super(MyObjectSerializer, self).get_fields(*args, **kwargs)
fields['slug'].queryset = MyObject.objects.filter(self.context['view'].request.user)
return fields
或者在视图中:
def get_serializer(self):
serializer = super(MyObjectView, self).get_serializer()
serializer.fields['slug'].queryset = MyObject.objects.filter(self.request.user)
同样的事情 - 一旦你有对当前用户的引用,你就会在slug字段上设置QuerySet - 它只取决于哪个最适合你。
我希望有所帮助。