gpt4 book ai didi

django - 如何使用模型字段过滤 serializers.SlugRelatedField 查询集

转载 作者:行者123 更新时间:2023-12-01 14:39:48 25 4
gpt4 key购买 nike

我无法使用 queryset 过滤 SlugRelatedField 的可能选项范围。这是我的序列化程序

class AttendeeProfileSerializer(serializers.HyperlinkedModelSerializer):
"""
Profile Serializer
"""
user = serializers.SlugRelatedField(slug_field='username', queryset=User.objects.all())
module = serializers.SlugRelatedField(slug_field='id', queryset=AttendeeModule.objects.all())
picture = serializers.ImageField(allow_empty_file=False, required=False)

class Meta:
model = AttendeeProfile
fields = (
'user', 'module', 'title', 'company', 'email', 'picture', 'is_active', 'created'
)

我想过滤模块字段,例如 serializers.SlugRelatedField(slug_field='id', queryset=AttendeeModule.objects.filter(module__app='module__app')或类似的东西,每个模块都属于一个应用程序。

我想我需要通过 View 为序列化程序提供更多上下文?我应该覆盖 View 上的方法吗?我已经尝试过,但我对 Django 休息框架还是新手,这给我带来了很多麻烦

观点是
class AttendeesList(generics.ListCreateAPIView):
"""

"""
queryset = AttendeeProfile.objects.all()
serializer_class = AttendeeProfileSerializer

并使用这条路线
url(r'^apps/(?P<url_name>[a-z][a-z0-9]+)/modules/(?P<module_id>[0-9]+)/attendees$',
views.AttendeesList.as_view(),
name='attendees-list'),

最佳答案

所以我找到了解决我古老问题的方法:

class SlugRelatedModuleField(SlugRelatedField):

def get_queryset(self):
queryset = self.queryset
if hasattr(self.root, 'app_id'):
queryset = queryset.filter(module__app_id=self.root.app_id)
return queryset

class AttendeeProfileSerializer(ModelSerializer):

def __init__(self, *args, **kwargs):
self.app_id = kwargs.pop('app_id')
super().__init__(*args, **kwargs)

module = SlugRelatedModuleField(
slug_field='id',
queryset=AttendeeModule.objects.all()
)

class Meta:
model = AttendeeProfile
fields = ('user', 'module', 'title', 'company', 'email', 'picture', 'is_active', 'created')

这会分配一个 app_id父/根序列化程序上的属性,并且 SlugRelatedModuleField 检查父级以过滤查询集。多田。

关于django - 如何使用模型字段过滤 serializers.SlugRelatedField 查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29642390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com