如何在 Django 中从两个模型(一对一)中进行过滤

How do I filter from two models (one to one) in Django

我有两个 1-1 关系的模型,User 和 deviceInfo。我正在尝试查询以获取具有特定设备 ID 的所有用户,以及仅访客。

我的模特:

class User(models.Model):
    userID = models.CharField(max_length=101,primary_key=True)
    guest = models.BooleanField()


class deviceInfo(models.Model):
    user = models.ForeignKey(to=User, on_delete=models.CASCADE, unique = True)
    deviceID = models.CharField(max_length=101, default=None)

到目前为止,我已经了解了如何按设备 ID 进行过滤。但我不确定如何进一步过滤它,因为来宾值在另一个模型中。

我目前拥有的:(仅过滤设备 ID)

numIDs = deviceInfo.objects.filter(deviceID=deviceId).count()

我试过的方法:(不起作用)

User.objects.filter(deviceInfo = numID)

我收到错误消息“精确查找的 QuerySet 值必须使用切片限制为一个结果。”

试试这个:

User.objects.filter(guest=True, deviceinfo__deviceID=deviceId)

或者如果您只需要用户 ID

user_ids = deviceInfo.objects.filter(deviceId=deviceId, user__guest=True).values_list("user", flat=True)
User.objects.filter(id__in=user_ids)

参见 Django:Lookups that span relationships