首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何验证Django REST Framework序列化程序中的所有相关字段是否指定具有相同所有者的对象?

如何验证Django REST Framework序列化程序中的所有相关字段是否指定具有相同所有者的对象?
EN

Stack Overflow用户
提问于 2018-11-20 01:07:06
回答 1查看 251关注 0票数 1

我有一个Django应用程序,它使用django-organizations支持共享帐户,rest_framework用于API。我有一个用于身份验证的自定义模型,它将用户与特定于组织的API令牌相关联。

我有一个带有几个外键的模型,一个带有相关字段的序列化程序,以及一个用于API视图的ModelViewSet。我希望确保任何用于创建或修改模型实例的API调用都要验证为相关字段指定的对象是否具有相同的所有者(组织)。

代码语言:javascript
复制
class Bar(models.Model):
    uuid = models.UUIDField(
        default=uuid.uuid4, editable=False, unique=True)
    organization = models.ForeignKey(
        Organization, on_delete=models.CASCADE)

class Foo(models.Model):
    uuid = models.UUIDField(
        default=uuid.uuid4, editable=False, unique=True)
    organization = models.ForeignKey(
        Organization, on_delete=models.CASCADE)
    bar = models.ForeignKey(
        Bar, on_delete=models.CASCADE)

class FooSerializer(serializers.ModelSerializer):
    class Meta:
        model = Foo
        fields = ('uuid', 'organization', 'bar')

    bar = serializers.SlugRelatedField(
        slug_field='uuid', queryset=Bar.objects.all())

如何验证相关对象是否属于同一个帐户?理想情况下,我可以重写序列化程序中每个RelatedField指定的查询集,但我认为这是不可能的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-20 03:04:47

想到了两种方法--您可以在ModelSerializer上进行w/验证,但是您必须将请求传递到序列化程序中。我的直觉是,它可能更有意义的观点集。这样,如果它访问的是不应该访问的东西,则返回404 (较少的信息泄漏)。

若要在视图集中具有此功能,请定义get_queryset w/

代码语言:javascript
复制
def get_queryset(self)
    qs = MODEL.objects.filter(relation__user=self.request.user)
    return qs

以下是更多的例子:

queryset

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53384810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档