ユーザーが自分の表示列を選択するアプリケーションがあります。各表示列には、指定された式があります。その式を計算するには、いくつかの関連する列(1対1の関係)を結合して値を計算する必要があります。
モデルは次のようなものです(これは単なるサンプルモデルであり、実際には100を超えるフィールドがあります)。
class CompanyCode(models.Model):
"""Various Company Codes"""
nse_code = models.CharField(max_length=20)
bse_code = models.CharField(max_length=20)
isin_code = models.CharField(max_length=20)
class Quarter(models.Model):
"""Company Quarterly Result Figures"""
company_code = models.OneToOneField(CompanyCode)
sales_now = models.IntegerField()
sales_previous = models.IntegerField()
私はやってみました:
ratios = {'growth':'quarter__sales_now / quarter__sales_previous'}
CompanyCode.objects.extra(select=ratios)
# raises "Unknown column 'quarter__sales_now' in 'field list'"
また、生のクエリを使用してみました:
query = ','.join(['round((%s),2) AS %s' % (formula, ratio_name)
for ratio_name, formula in ratios.iteritems()])
companies = CompanyCode.objects.raw("""
SELECT `backend_companycode`.`id`, %s
FROM `backend_companycode`
INNER JOIN `backend_quarter` ON ( `backend_companycode`.`id` = `backend_companyquarter`.`company_code_id` )
""", [query])
#This just gives empty result
したがって、できれば「extra」コマンドを使用して関連する列を使用する方法について、少し手がかりを教えてください。ありがとう。