我有一个“工具”模型,其中包括一个“活动”字段。
当我进入其余的api时,似乎列出了所有的Instruments,但是我发现其中的一件从未出现过。即使符合条件也是如此。
这是“仪器”视图集的定义方式:
class InstrumentViewSet(viewsets.ModelViewSet):
serializer_class = serializers.InstrumentSerializer
queryset = models.Instrument.objects.filter(active=True)
lookup_field = ('slug')
permissions = (permissions.IsAuthenticated)
def get_queryset(self):
plant = self.request.query_params.get('plant', None)
location = self.request.query_params.get('location', None)
name = self.request.query_params.get('name', None)
issue = str2bool(self.request.query_params.get('issue', False))
attn = str2bool(self.request.query_params.get('attn', False))
pastdue = str2bool(self.request.query_params.get('pastdue', False))
active_issues = str2bool(self.request.query_params.get('active_issues', False))
active_pastdue = str2bool(self.request.query_params.get('active_pastdue', False))
active_due = str2bool(self.request.query_params.get('active_due', False))
since = self.request.query_params.get('since', None)
if active_issues:
return queries.get_active_issues(self.request.user, None, None)
elif active_pastdue:
return queries.get_past_due(self.request.user, None, None)
elif active_due:
return queries.get_due(self.request.user, None, None)
queryset = models.Instrument.objects.filter(location__plant__in=self.request.user.plants.all())
if plant is not None:
queryset = queryset.filter(location__plant__pk=plant)
if location is not None:
queryset = queryset.filter(location__pk=location)
if name is not None:
queryset = queryset.filter(Q(name__contains=name)|Q(location__name__contains=name))
if issue:
queryset = queryset.filter(active_issue=issue)
if attn:
queryset = queryset.filter(attention=attn)
if pastdue:
queryset = queryset.filter(past_due=pastdue)
if since is not None:
last_time = datetime.strptime(since, '%Y-%m-%d %H:%M:%S')
queryset = queryset.filter(date_edited__gte=last_time)
return queryset
它应该返回我所指的是active = true的所有工具,但未显示。
与任何软件包有关吗?我尝试在另一台机器上进行测试,然后仪器出现了。
当前服务器正在Ubuntu上运行,我尝试更新某些软件包,但出现编译器错误,指出它在ObjC中有效,但在C ++中无效。
我现在不知道该怎么办。
答案 0 :(得分:0)
返回应用于列表视图的查询集,该查询集应用作详细视图中查找的基础。 默认返回由
queryset
属性指定的查询集。
这意味着,仅当您不覆盖queryset
方法时,DRF才会查看 get_queryset()
属性
因此,您必须 重新定义 queryset
中get_queryset()
属性的逻辑,如
class InstrumentViewSet(viewsets.ModelViewSet):
serializer_class = serializers.InstrumentSerializer
queryset = models.Instrument.objects.filter(active=True)
lookup_field = ('slug')
permissions = (permissions.IsAuthenticated)
def get_queryset(self):
if some_default_logic:
return models.Instrument.objects.filter(active=True)
# rest of the code