gpt4 book ai didi

django - 过滤嵌套关系 Django Rest Framework

转载 作者:行者123 更新时间:2023-12-01 23:40:36 26 4
gpt4 key购买 nike

我有两个模型,如下所示:

class Subject(models.Model):

subject_code = models.CharField(max_length=12, unique=True)
name = models.CharField(max_length=100)
dept_code = models.CharField(max_length=6)

和...
class Subject_assessment(models.Model):    
subject_code = models.ForeignKey(Subject, related_name='sub_assessments')
year = models.CharField(max_length=4)
name = models.CharField(max_length=50)

我以这样一种方式创建了我的序列化,当我检索一个主题时,我也会检索与该主题相关的评估。我正在使用以下序列化程序来完成此操作:
class AssessmentsSerializer(serializers.ModelSerializer):
class Meta:
model = Subject_assessment
fields = (
"subject_code", "year", "name"
)

class SubjectSerializer(serializers.ModelSerializer):
sub_assessments = AssessmentsSerializer(many=True)
class Meta:
model = Subject
fields = (
"subject_code", "name", "dept_code",
"sub_assessments"
)

这段代码按预期完美运行,因为它给了我这样的结果:
{
"subject_code":"ECR2243",
"name":"Statistics",
"dept_code":"Stats",
"sub_assessments":[
{
"subject_code":"ECR2243",
"year":"2017",
"name":"Test 1"
},
{
"subject_code":"ECR2243",
"year":"2016",
"name":"Test 1"
}
]
}

我的问题是我只想检索特定年份的评估。例如,如果我通过 2017 作为感兴趣的年份,我不希望检索 的评估。 2016 就像我目前得到的一样。

任何人都可以帮助我如何构建我的代码以实现这一目标。先感谢您。

编辑 1
我的views.py如下:
class  SubjectViewSet(viewsets.ModelViewSet):
serializer_class = SubjectSerializer
lookup_field = 'subject_code'

def get_queryset(self):
qry_subject_code = self.request.GET.get('subject_code')
retrieved_sub = Subject.objects.filter(subject_code=qry_subject_code)
return retrieved_sub

最佳答案

这是对我有用的解决方案:

class FilteredAssessmentsSerializer(serializers.ListSerializer):
def to_representation(self,data):
qry_year = self.context['request'].GET.get('year')
data = data.filter(year=qry_year)
return super(FilteredAssessmentsSerializer, self).to_representation(data)

class AssessmentsSerializer(serializers.ModelSerializer):
class Meta:
model = Subject_assessment
list_serializer_class = FilteredAssessmentsSerializer
fields = '__all__'

class SubjectSerializer(serializers.ModelSerializer):
sub_assessments = AssessmentsSerializer(many=True)
class Meta:
model = Subject
fields = (
"subject_code", "name", "dept_code",
"faculty_code", "university_code", "description",
"sub_assessments"
)

引用 :我结合了以下解决方案,提出了一个适合我的解决方案。

How can I apply a filter to a nested resource in Django REST framework?

https://stackoverflow.com/a/28354281/7210105

关于django - 过滤嵌套关系 Django Rest Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42156901/

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