我设法使用以下配置文件从表MemberDeclareRecept
和Member
获取数据。我在这里寻找MemberDeclareRecept.pk
。但是,如果我搜索Member.CoId
,我怎样才能获得所有数据?
MemberSearchByCode
视图给出了表中的所有成员,但我无法获得特定成员。
以下是我的模特
class Member(models.Model):
Name = models.CharField(max_length=40,null=True)
FirstName = models.CharField(max_length=40,null=True)
DateBirth = models.DateField(,null=True)
CoId = models.CharField(max_length=6,null=True)
class MemberDeclareRecept(models.Model):
SyMember=models.ForeignKey(Member,verbose_name='Name member ',null=True,related_name='Member')
DateDeclareRecept=models.DateField(('Date received',null=True)
正在使用的序列化程序
class MemberDeclareSerializer(serializers.ModelSerializer):
member = serializers.StringRelatedField(read_only=True)
SyRecept=serializers.StringRelatedField(read_only=True)
class Meta:
model = MemberDeclareRecept
fields=('id','member','SyRecept')
我目前正在使用的观点
class MemberDeclareDetail(generics.ListCreateAPIView):
queryset=MemberDeclareRecep.objects.all()
serializer_class =MemberDeclareSerializer
def get_object(self,pk):
try:
return self.queryset.get(pk=pk)
except MemberDeclareRecep.DoesNotExist:
raise Http404
def get(self, request, pk,format=None):
entries = self.get_object(pk)
serializer = MemberDeclareSerializer(entries)
return Response(serializer.data)
class MemberSearchByCode(generics.ListAPIView):
serializer_class =MemberSerializer
def get_queryset(self):
member=self.request.QUERY_PARAMS.get(Co_id',None)
if membre is not None:
queryset = queryset.filter(member__Name=member
return queryset
答案 0 :(得分:0)
好像您已找到答案based on the comment,并且它包含在下面。
class MemberSearch(generics.ListAPIView):
serializer_class=MemberDeclareSerializer
def get_queryset(self):
member = self.kwargs['Co_id']
return member_declare_recept.objects.filter(member__Co_id=member)
重要的是要注意,这不是基于查询参数过滤查询集,而是基于URL中存在的参数对其进行过滤。如果您基于查询参数对其进行过滤,如果您需要一次获取所有对象的列表,这将非常有用,您将使用的URL将是
/api/members/?company=[co_id]
哪会使公司ID成为可选的。但在你的情况下,id被嵌入url本身。这通常是referred to as hierarchal urls,而且是generally not recommended,但您的网址最终会像
一样/api/company/[co_id]/members
对某些人来说这是优选的,甚至在某些情况下也是必需的。
现在,如果您想使用查询参数而不是url参数进行过滤,则代码中只需要稍作更改。
class MemberSearch(generics.ListAPIView):
serializer_class=MemberDeclareSerializer
def get_queryset(self):
company_id = self.request.query_parameters.get('company', None)
if not company_id:
return member_declare_recept.objects.all()
return member_declare_recept.objects.filter(member__Co_id=company_id)
这还有一个额外的好处,即直接通过django-filter and the DjangoFilterBackend
支持。