【问题标题】:Django - Get a single queryset values list from two related modelsDjango - 从两个相关模型中获取单个查询集值列表
【发布时间】:2022-01-15 16:06:54
【问题描述】:

我有一个用户模型

class User(AbstractBaseUser):
    name = models.CharField(max_length=100, default='Default')
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,
    )
    active = models.BooleanField(default=True)

以及相关的 SecondaryEmails 模型

class SecondaryEmails(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='secondary_emails')
    email = models.EmailField()
    is_validated = models.BooleanField(default=False)

现在我想创建一个方法来获取包含 User 模型的电子邮件和存储在相关 SecondaryEmails 模型中的所有电子邮件的 values_list。

我能够得到一个 values_list 只包含用户模型的电子邮件

>>> User.objects.filter(email='test@gmail.com').prefetch_related('secondary_emails').values_list('email')
>>> <QuerySet [('test@gmail.com',)]>

相关的 SecondaryEmails 模型包含另外两封电子邮件'a1@gmail.com'、'a2@gmail.com'。我希望将这两封电子邮件也附加到 values_list() 中,如下所示:

<QuerySet [('test@gmail.com',), ('a1@gmail.com',), ('a2@gmail.com',)]>

提前谢谢你。

【问题讨论】:

  • 去掉.filter(email='test@gmail.com')方法后有没有试过?
  • 谢谢。是的,我做到了,但这会转储所有行中的所有电子邮件。我需要以某种方式过滤它。

标签: django django-models django-views django-queryset


【解决方案1】:

相关电子邮件的字段名称应为“secondary_emails__email”,因此您需要将其包含在 values_list() 中:

User.objects.filter(email='test@gmail.com').prefetch_related('secondary_emails').values_list('email', 'secondary_emails__email')

【讨论】:

    猜你喜欢
    • 2020-01-11
    • 2020-05-04
    • 2018-12-04
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2020-04-19
    相关资源
    最近更新 更多