如果在django中关联父表,则打印该值

时间:2016-10-28 06:03:25

标签: python django

在django项目上工作,我有一个Event表。此表中的每个事件都属于特定用户。

class Event(models.Model):
    user_id=models.ForeignKey(User, on_delete=models.CASCADE)
    event_auth_id=models.CharField(null=True, max_length=225)
    event_auth_step2_id=models.CharField(null=True, max_length=225)
    event_title=models.CharField(max_length=225)

我正在编写一个关于Event模型的查询,并使用values()方法查找特定列的值,但我还想打印用户模型中该用户的电子邮件ID。查询是: -

events = Event.objects.all().filter(**filters).values('id', 'event_title', 'category', 'event_start_from', 'event_start_to', 'created', 'modified', 'event_status')

如何打印用户表中用户电子邮件的值。我还想添加一个过滤器来按电子邮件ID过滤用户,但想在事件模型上编写查询

1 个答案:

答案 0 :(得分:1)

使用__查询语法访问相关模型'user_id__email'

https://docs.djangoproject.com/en/1.10/topics/db/queries/#lookups-that-span-relationships

events = Event.objects.all().filter(**filters).values('user_id__email', 'id', 'event_title', 'category', 'event_start_from', 'event_start_to', 'created', 'modified', 'event_status')

同样user_id您的_id在这里是多余的。当您使用ForeignKey

时,django将自己在DB中命名此字段user_id

回答评论 过滤/排除.exclude(user_id__email='')的相同想法会排除所有带有电子邮件的用户的活动

events = Event.objects.all().filter(**filters).exclude(user_id__email='').values('user_id__email', 'id', 'event_title', 'category', 'event_start_from', 'event_start_to', 'created', 'modified', 'event_status')