【问题标题】:Django Related Field based filter基于 Django 相关字段的过滤器
【发布时间】:2012-10-16 06:06:13
【问题描述】:

我有两个模型,其中一个与另一个相关。

class Contacts(BaseModel):
    user = models.ForeignKey(User, related_name='contacts')
    group = models.ForeignKey(ContactGroups, related_name = 'contact_list')
    name = models.CharField(_("Name"), max_length = 250, null = True, blank = True)
    title = models.CharField(_("Title"), max_length = 250, null = True, blank = True)
    twitter = models.CharField(_("Twitter"), max_length = 250, null = True, blank = True)
    facebook = models.CharField(_("Facebook"), max_length = 250, null = True, blank = True)
    google = models.CharField(_("Google +"), max_length=250, null = True, blank = True)
    notes = models.TextField(_("Notes"), null = True, blank = True)
    image = ImageField(_('mugshot'), upload_to = upload_to, blank = True, null = True)



class PhoneNumbers(BaseModel):
    contact = models.ForeignKey(Contacts, related_name='phone_numbers')
    phone = models.CharField(_("Phone"), max_length = 200, null = True, blank = True)
    type = models.CharField(_("Type"), max_length = 200, choices = TYPES, null = True, blank = True)

在这里,我想要过滤至少有一个电话号码的联系人。

我试过了,

contacts = Contacts.objects.filter(user=request.user, phone_numbers__isnull=True)

正确与否?有没有其他优化的方法?我们如何根据相关名称过滤查询集?

【问题讨论】:

  • 您是否尝试过从 Phonenumber 模型访问数据。所以你可以让所有联系人都有一个电话号码,然后尝试将所有联系人对象添加到字典中以避免重复联系人作为字典键和电话号码作为值(值可以是你需要的任何东西)
  • 此方法会输出正确答案,但需要更多查询。这将需要更多时间

标签: django django-models django-queryset


【解决方案1】:

我想你想要,

contacts = Contacts.objects.filter(user=request.user, phone_numbers__isnull=False)

即检查False 而不是True,因为你想要Contacts,其中至少有一个PhoneNumber。如果它不存在,它将是NULL

【讨论】:

    猜你喜欢
    • 2020-08-15
    • 2020-10-30
    • 2021-12-20
    • 2021-11-28
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    相关资源
    最近更新 更多