限制在django休息框架中的外键选择 [英] Limit choices to foreignkey in django rest framework

查看:158
本文介绍了限制在django休息框架中的外键选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何限制要与节点链接的request.user的图像。我希望我能做一些类似的事情:

  photo = models.ForeignKey(
Image,
limit_choices_to = {'owner':username},

但request.user而不是用户名和我不想使用本地线程。



models.py

  class Node(models.Model):
owner = models.ForeignKey(User)
content = models.TextField()
photo = models.ForeignKey(Image)

class Image(models.Model):
owner = models.ForeignKey(User)
file = models.ImageField(upload_to = get_upload_file_name)
pre>

serializers.py

  class ImageSerializer(serializers.ModelSerializer) :
owner = serializers.Field('owner.username')

class Meta:
model = Image
fields =('file','owner')

class NodeSerializer(serializers.HyperlinkedModelSerializer):

cla ss元:
model = Node
fields =('content','photo','owner')


解决方案

我将通过覆盖 get_serializer_class 来处理这个事件,以便在运行时动态返回一个串行化器类, 选项选项在该字段上:

  def get_serializer_class(s​​elf, ..)
user = self.request.user
owner_choices = ...#但是你想限制选项

class ImageSerializer(serializers.ModelSerializer):
owner = serializers.Field('owner.username',choices = owner_choices)

class Meta:
model = Image
fields =('file','owner' )

return ImageSerializer


How to limit images of request.user to be linked with node. I wish I could do something like:

photo = models.ForeignKey(
    Image,
    limit_choices_to={'owner': username},
)

but request.user rather than username and I don't want to use local threads.

models.py

class Node(models.Model):
    owner = models.ForeignKey(User)
    content = models.TextField()
    photo = models.ForeignKey(Image)

class Image(models.Model):
    owner = models.ForeignKey(User)
    file = models.ImageField(upload_to=get_upload_file_name)

serializers.py

class ImageSerializer(serializers.ModelSerializer):
    owner = serializers.Field('owner.username')

    class Meta:
        model = Image
        fields = ('file', 'owner')

class NodeSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Node
        fields = ('content', 'photo', 'owner')

解决方案

I would deal with this by overriding get_serializer_class to dynamically return a serializer class at runtime, setting the choices option on the field there:

def get_serializer_class(self, ...):
    user = self.request.user
    owner_choices = ...  # However you want to restrict the choices

    class ImageSerializer(serializers.ModelSerializer):
        owner = serializers.Field('owner.username', choices=owner_choices)

        class Meta:
            model = Image
            fields = ('file', 'owner')

    return ImageSerializer

这篇关于限制在django休息框架中的外键选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆