获取有关 1 QueryDjango 的所有信息
Get all information on 1 QueryDjango
我试图在单个查询集中获取所有值,我有以下模型:
class Temporal(model.Models):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
value=models.CharField(max_length=60)
created_at = models.DateTimeField(auto_now_add=True)
date_start = models.DateTimeField(auto_now_add=True)
date_end = models.DateTimeField(auto_now_add=True)
rate_name = models.ForeignKeyField("RateName")
concept_payment = models.CharField(max_length=60)
order = models.IntegerField(null=True, blank=True)
和其他一些领域...
我通过这种方式获得了所有差异concept_payment:
energy_concepts = Temporal.objects.filter(rate_name=rate_name,
date_start__month__lte=month_apply,
date_end__month__gte=month_apply,
concept_payment='Energy').first()
demand_concepts = Temporal.objects.filter(rate_name=rate_name,
date_start__month__lte=month_apply,
date_end__month__gte=month_apply,
concept_payment='Demand').first()
other_concepts = Temporal.objects.filter(rate_name=rate_name,
date_start__month__lte=month_apply,
date_end__month__gte=month_apply,
concept_payment='Others').first()
taxes_concepts = Temporal.objects.filter(rate_name=rate_name,
date_start__month__lte=month_apply,
date_end__month__gte=month_apply,
concept_payment='Taxes').first()
等等...唯一的区别是concept_payment,所以我想知道是否有办法把它们全部获取,使用注释而不是一个一个地获取,顺便说一句concept_payment sis dynamic 所以我想我必须首先了解所有不同的概念。
提前致谢。
任何方向或建议都会很有帮助,我主要担心的是每个过滤器都会访问数据库,我认为这不是很有效。
您可以使用 django 的 in_bulk
为您提供一个字典,其中 concept_payment
作为键,Temporal
实例作为值。
这会很棘手,因为每个 concept_type
可以有多个实例,但是由于您使用的是 postgres,并且您说 returned 哪个实例并不重要,那么您可以将 distinct 与 concept_payment
结合使用以删除重复项。
所以试试:
Temporal.objects.filter(
rate_name=rate_name,
date_start__month__lte=month_apply,
date_end__month__gte=month_apply,
concept_payment__in=['Taxes', 'Others', 'Demand', 'Energy'],
).distinct('concept_payment').in_bulk(field_name='concept_payment')
这应该return类似于:
{
'Taxes': '<Temporal object with Taxes concept_type>',
'Demand': '<Temporal object with Demand concept_type>',
'Energy': '<Temporal object with Energy concept_type>',
'Others': '<Temporal object with Others concept_type>',
}
我试图在单个查询集中获取所有值,我有以下模型:
class Temporal(model.Models):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
value=models.CharField(max_length=60)
created_at = models.DateTimeField(auto_now_add=True)
date_start = models.DateTimeField(auto_now_add=True)
date_end = models.DateTimeField(auto_now_add=True)
rate_name = models.ForeignKeyField("RateName")
concept_payment = models.CharField(max_length=60)
order = models.IntegerField(null=True, blank=True)
和其他一些领域...
我通过这种方式获得了所有差异concept_payment:
energy_concepts = Temporal.objects.filter(rate_name=rate_name,
date_start__month__lte=month_apply,
date_end__month__gte=month_apply,
concept_payment='Energy').first()
demand_concepts = Temporal.objects.filter(rate_name=rate_name,
date_start__month__lte=month_apply,
date_end__month__gte=month_apply,
concept_payment='Demand').first()
other_concepts = Temporal.objects.filter(rate_name=rate_name,
date_start__month__lte=month_apply,
date_end__month__gte=month_apply,
concept_payment='Others').first()
taxes_concepts = Temporal.objects.filter(rate_name=rate_name,
date_start__month__lte=month_apply,
date_end__month__gte=month_apply,
concept_payment='Taxes').first()
等等...唯一的区别是concept_payment,所以我想知道是否有办法把它们全部获取,使用注释而不是一个一个地获取,顺便说一句concept_payment sis dynamic 所以我想我必须首先了解所有不同的概念。 提前致谢。
任何方向或建议都会很有帮助,我主要担心的是每个过滤器都会访问数据库,我认为这不是很有效。
您可以使用 django 的 in_bulk
为您提供一个字典,其中 concept_payment
作为键,Temporal
实例作为值。
这会很棘手,因为每个 concept_type
可以有多个实例,但是由于您使用的是 postgres,并且您说 returned 哪个实例并不重要,那么您可以将 distinct 与 concept_payment
结合使用以删除重复项。
所以试试:
Temporal.objects.filter(
rate_name=rate_name,
date_start__month__lte=month_apply,
date_end__month__gte=month_apply,
concept_payment__in=['Taxes', 'Others', 'Demand', 'Energy'],
).distinct('concept_payment').in_bulk(field_name='concept_payment')
这应该return类似于:
{
'Taxes': '<Temporal object with Taxes concept_type>',
'Demand': '<Temporal object with Demand concept_type>',
'Energy': '<Temporal object with Energy concept_type>',
'Others': '<Temporal object with Others concept_type>',
}