【发布时间】:2018-07-12 23:34:31
【问题描述】:
我的用户帐户权限存储在request.session.get('authority')
目前,DRF 网络可浏览 HTML 表示中的端点以 html 形式显示所有帐户的所有地址。当我查询所有地址时,我会期望这一点。
DRF 表单截图:地址显示其权限。uuid,它们应该只显示当前权限地址数据。
公司序列化程序
# ToDo: filter queryset objects
class CompanySerializer(serializers.ModelSerializer):
clients = serializers.HyperlinkedRelatedField(
many=True,
view_name='client-detail',
queryset=Client.objects.all()
)
addresses = serializers.HyperlinkedRelatedField(
many=True,
view_name='address-detail',
queryset=Address.objects.all()
)
class Meta:
model = Company
fields = ('name', 'url', 'clients', 'addresses')
read_only_fields = ('authority',)
我希望能够做类似的事情:
addresses = serializers.HyperlinkedRelatedField(
many=True,
view_name='address-detail',
queryset=Address.objects.filter(authority=request.session.get('authority'))
)
但不确定当我设置 HyperlinkedRelatedField 时是否有办法访问序列化程序中的请求数据。
也许我以完全错误的方式处理这个问题。任何指导将不胜感激。
更新
非常感谢 Enthusiast Martin,根据他的回答,这就是我现在实现它的方式:
def hyperlinkedRelatedFieldByAuthority(model, view_name, authority):
return serializers.HyperlinkedRelatedField(
many=True,
view_name=view_name,
queryset=model.objects.filter(authority=authority)
)
class CompanySerializer(serializers.ModelSerializer):
def get_fields(self):
fields = super().get_fields()
authority = self.context['request'].session.get('authority')
fields['clients'] = hyperlinkedRelatedFieldByAuthority(Client, 'client-detail', authority)
fields['addresses'] = hyperlinkedRelatedFieldByAuthority(Address, 'address-detail', authority)
return fields
【问题讨论】:
标签: django django-rest-framework