如何在 Django 中过滤不同模型中的数据?
how to filter data in different models in django?
我的模型
class Player(TimeStampedModel):
name = models.CharField(max_length=200)
email = models.CharField(max_length=200)
email_verified = models.BooleanField(default=False, blank=True)
phone = models.CharField(max_length=200)
phone_verified = models.BooleanField(default=False, blank=True)
company_id = models.ImageField(upload_to=get_file_path_id_card, null=True,
max_length=255)
company_id_verified = models.BooleanField(default=False, blank=True)
team = models.ForeignKey(Team, related_name='player', on_delete=models.DO_NOTHING)
def __str__(self):
return self.name
这是我的模型,如何在多个模型中过滤数据?
您可以使用查询集 filter by modal object's field。
您也可以使用它来过滤 relationships on models。
在您的示例中,您可以过滤所有具有武器强度 > 10 的角色的玩家条目
Player.objects.filter(character__weapon__strength__gt=10)
为了便于阅读,您也可以将它们分成 3 个变量。
player_q = Player.objects.filter(character__isnull=False)
ch_q = player_q.filter(weapon__isnull=False)
wpn_dmg = ch_q.filter(strength__gt=10)
请注意过滤器是惰性的,因此不会 return 实际模型实例 untill they're evaluated。我认为在这种情况下 gt returns 是一个实例。
This documentation 遍历您可以使用 QuerySet 对象方法 filter(), get(),
和 exclude()
执行的所有字段集查找
我的模型
class Player(TimeStampedModel):
name = models.CharField(max_length=200)
email = models.CharField(max_length=200)
email_verified = models.BooleanField(default=False, blank=True)
phone = models.CharField(max_length=200)
phone_verified = models.BooleanField(default=False, blank=True)
company_id = models.ImageField(upload_to=get_file_path_id_card, null=True,
max_length=255)
company_id_verified = models.BooleanField(default=False, blank=True)
team = models.ForeignKey(Team, related_name='player', on_delete=models.DO_NOTHING)
def __str__(self):
return self.name
这是我的模型,如何在多个模型中过滤数据?
您可以使用查询集 filter by modal object's field。
您也可以使用它来过滤 relationships on models。
在您的示例中,您可以过滤所有具有武器强度 > 10 的角色的玩家条目
Player.objects.filter(character__weapon__strength__gt=10)
为了便于阅读,您也可以将它们分成 3 个变量。
player_q = Player.objects.filter(character__isnull=False)
ch_q = player_q.filter(weapon__isnull=False)
wpn_dmg = ch_q.filter(strength__gt=10)
请注意过滤器是惰性的,因此不会 return 实际模型实例 untill they're evaluated。我认为在这种情况下 gt returns 是一个实例。
This documentation 遍历您可以使用 QuerySet 对象方法 filter(), get(),
和 exclude()