限制在django休息框架中的外键选择 [英] Limit choices to foreignkey in django rest framework
本文介绍了限制在django休息框架中的外键选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何限制要与节点链接的request.user的图像。我希望我能做一些类似的事情:
photo = models.ForeignKey(
Image,
limit_choices_to = {'owner':username},
)
但request.user而不是用户名和我不想使用本地线程。
models.py
class Node(models.Model):
pre>
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):
cla ss元:
model = Node
fields =('content','photo','owner')
解决方案我将通过覆盖
get_serializer_class
来处理这个事件,以便在运行时动态返回一个串行化器类,选项
选项在该字段上:def get_serializer_class(self, ..)
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 thechoices
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屋!
查看全文