arr*_*rt_ 3 django django-models django-queryset python-3.x
我有3个型号:
class Event(models.Model):
cur_datetime = models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0, 0, 0, pytz.UTC), blank=True, null=True)
week_no = models.IntegerField()
day_no = models.IntegerField()
class SubEvent(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE)
version = models.IntegerField()
class SubSubEvent(models.Model):
sub_event = models.ForeignKey(SubEvent, on_delete=models.CASCADE)
length = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
我想从SubSubEvent模型中获取一个查询集,其中包含所有外键作为一个对象。我现在拥有的是:
querySet = SubSubEvent.objects.filter(sub_event__event__cur_datetime__range=[from_date, to_date])
Run Code Online (Sandbox Code Playgroud)
这将返回一个查询集,并使用 for 循环来获取__dict__每个对象,我得到如下结果:
{'event_id': 1, '_state': <django.db.models.base.ModelState object at 0x7fd7d9cefeb8>, 'id': 10, 'length': '1'}
Run Code Online (Sandbox Code Playgroud)
这只是我想要实现的查询的一部分。我真正想要的是所有字段,而event_id不仅仅是id数字。换句话说,来自 plus 的所有字段(包括数据)都Event在SubEvent一个SubSubEvent查询集中。该查询集应包含带有 cur_datetime、week_no、day_no、version 和 length 的对象。
听起来你正在寻找select_related()。
qs = SubSubEvent.objects \
.select_related('sub_event__event') \
.filter(sub_event__event__cur_datetime__range=[from_date, to_date])
Run Code Online (Sandbox Code Playgroud)
然后,您可以访问相关SubEvent资源Event,而无需访问数据库。
sub_sub_event = qs[0]
sub_event = sub_sub_event.sub_event # doesn't hit the database
event = sub_sub_event.sub_event.event # doesn't hit the database
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16205 次 |
| 最近记录: |