【问题标题】:how to filter data in different models in django?如何在 django 中过滤不同模型中的数据?
【发布时间】:2022-01-21 21:35:53
【问题描述】:

我的模型

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 

这是我的模型,如何过滤多个模型中的数据?

【问题讨论】:

标签: django filtering


【解决方案1】:

您可以使用查询集来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)

请注意过滤器是惰性的,因此不会返回实际的模型实例untill they're evaluated。我认为在这种情况下 gt 返回一个实例。

This documentation 遍历您可以使用 QuerySet 对象方法 filter(), get(),exclude() 进行的所有字段集查找

【讨论】:

  • 不,实际上我有 3 个模型,想过滤单页中的数据
  • @dilja 您是在尝试组合 3 个不同的模型记录,即 Author, Post and Website 作为上下文传递,还是尝试与 3 个不同的模型创建外键关系?
  • 外键关系
  • 3 种不同的模型,我如何使用 django 过滤器?
  • @dilja 我已经更新了我的答案。请确保在我的第二个链接上查看数据库关系管理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 2016-06-10
  • 2018-07-19
相关资源
最近更新 更多