如何在 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
我有两个 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