我现在通过几个过滤器查询 - 彼此独立 - 模型价格和持续时间(向下滚动模型定义)。最后,我想合并价格和持续时间查询集,以便一个价格与特定持续时间相关联。例如:
价格 - 在QuerySet _prices:
id | provider | servicelevel | price | currency
1 | 1 | 1 | 10 | 1
2 | 1 | 1 | 20 | 2
3 | 2 | 2 | 15 | 1
持续时间 - 在QuerySet _duration中:
id | servicelevel | country_in | country_out | duration | duration_details
1 | 1 | 83 | 236 | 5 | 'only on working days'
2 | 2 | 83 | 236 | 3 | 'Mon-Thu'
我需要的是:价格+持续时间加入Servicelevel
id | provider | servicelevel | price | currency | duration | duration_details
1 | 1 | 1 | 10 | 1 | 5 | 'only on working days'
2 | 1 | 1 | 20 | 2 | 5 | 'only on working days'
3 | 2 | 2 | 15 | 1 | 3 | 'Mon-Thu'
我玩过annotate()
,extra()
,但找不到解决方法。
型号:
class Price(models.Model):
...
provider = models.ForeignKey(Provider)
servicelevel = models.ForeignKey(Servicelevel)
price = models.DecimalField(max_digits=8, decimal_places=2)
currency = models.ForeignKey('api.Currency')
...
class Servicelevel(models.Model):
name = models.CharField(max_length=200)
provider = models.ForeignKey(Provider)
terms = models.TextField(blank=True)
insurance = models.BooleanField(default=False)
...
class Duration(models.Model):
servicelevel = models.ForeignKey(Servicelevel)
country_out = models.ForeignKey('Country', related_name='duration_out_country_relation', null=True)
country_in = models.ForeignKey('Country', related_name='duration_out_country_relation', null=True)
duration = models.IntegerField()
duration_details = models.TextField(blank=True)
...
KH
答案 0 :(得分:2)
我有两个QuerySet:一个是Price,另一个是Duration。在价格 QuerySet,有n个价格,每个价格都有一个Servicelevel。在里面 持续时间QuerySet,有n行Servicelevel唯一。我想要 将Duration QuerySet的数据添加到Price QuerySet
我认为这是出于显示目的,您需要重新构建数据:
results = {}
for p in price_queryset:
results.setdefault(p.pk, []).append(p)
for d in duration_queryset.filter(servicelevel=p.servicelevel):
results[p.pk].append(d)
答案 1 :(得分:0)
如果Duration和Servicelevel是一对一的,那么您可以重构数据模型。如果不是,您是否希望在最终报告中进行每一种排列?
查看_set
“向后”关系经理:
https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward