Django - 从两个相关模型中获取单个查询集值列表
Django - Get a single queryset values list from two related models
我有一个用户模型
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)
现在我想创建一个方法来获取 values_list,其中包含用户模型的电子邮件和存储在相关 SecondaryEmails 模型中的所有电子邮件。
我能够得到一个 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',)]>
提前致谢。
相关电子邮件的字段名称应为 'secondary_emails__email',因此您需要将其包含在 values_list():
User.objects.filter(email='test@gmail.com').prefetch_related('secondary_emails').values_list('email', 'secondary_emails__email')
我有一个用户模型
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)
现在我想创建一个方法来获取 values_list,其中包含用户模型的电子邮件和存储在相关 SecondaryEmails 模型中的所有电子邮件。
我能够得到一个 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',)]>
提前致谢。
相关电子邮件的字段名称应为 'secondary_emails__email',因此您需要将其包含在 values_list():
User.objects.filter(email='test@gmail.com').prefetch_related('secondary_emails').values_list('email', 'secondary_emails__email')