我有机器模型,假设机器有不同的状态,如生产、维护、挂起等。我想通过调用http://127.0.0.1:8000/api/machinestatus/?machines=2,7构建一个api来响应最新的机器状态 此端点应响应计算机ID 2和7的状态,我尝试了许多方法,但仍然无法使其工作,请帮助
型号:
class MachineStatus(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=False, null=False)
machine = models.ForeignKey(
Machine, on_delete=models.CASCADE, blank=False, null=False)
upt_time = models.DateTimeField(blank=False, null=False)
status = models.CharField(
max_length=1, choices=JOB, blank=False, null=False)
def __str__(self):
return f"{self.machine} {self.upt_time} {self.status}"
class Meta:
verbose_name_plural = "MachineStatus"
序列化程序:
class MachineStatusSerializer(serializers.ModelSerializer):
upt_time = serializers.DateTimeField(read_only=True)
status = serializers.CharField(read_only=True)
user = serializers.SlugRelatedField(read_only=True, slug_field='username')
machine = serializers.SlugRelatedField(
read_only=True, slug_field='name')
class Meta:
model = MachineStatus
fields = '__all__'
查看:
class MachineStatusView(viewsets.ModelViewSet):
''' Machine Status View '''
queryset = MachineStatus.objects.all()
serializer_class = MachineStatusSerializer
def get_queryset(self):
queryset = MachineStatus.objects.all()
machines = self.request.query_params.get('machines')
if machines:
machines = machines.split(',')
for i in machines:
queryset = MachineStatus.objects.all()
queryset = queryset.filter(machine=i).order_by('-upt_time')[:1]
\\ question: how to combine queries' result?
return queryset
每个“i”都会用对应的最新机器状态的结果调用queryset,但问题是如何在for循环中组合这些queryset?多谢了
或者有没有其他更好的方法来实现这一点?
我尝试过machine\uuu in=machine without for loop,但由于我没有使用progresql,所以不能使用distinct(“machine”)。你知道吗
谢谢你的帮助
我的建议是创建一个包含id、machine\u id、last\u status的sql视图。 然后创建一个模型并将其连接到这个sql视图,并在机器和最后一个机器状态之间建立一个链接。你知道吗
你可以用where in
相关问题 更多 >
编程相关推荐