【问题标题】:Get value from another model based on matching dates根据匹配日期从另一个模型中获取价值
【发布时间】:2016-02-12 18:16:11
【问题描述】:

基本上,我有 2 个模型,模型 1 是过去 5 年每天的汇率列表。模型 2 是发票模型。

我希望在保存发票模型时,将发票日期与汇率表中的特定日期相匹配,并将适当的汇率导入发票模型上的特定字段。

我一直在尝试在保存覆盖中使用类似的东西:

   invdate = obj.invoiceDate
    obj.exchange_relation=xchangeRates.objects.filter(date=invdate).values('id')
    obj.euroRate= exchangeRates.objects.filter(date=invdate).values('EuroRate')     

提前非常感谢! (对不起,没有更多的代码,我想我已经把自己与这个混淆了,并且已经删除了很多我尝试过的东西!

根据要求的模型:

class exchangeRates(models.Model):
date = models.DateField(verbose_name='Exchange Rate Date')
EuroRate = models.DecimalField(verbose_name="Euro Rate", max_digits=5, decimal_places=4)
DollarRate = models.DecimalField(verbose_name="Dollar Rate", max_digits=5, decimal_places=4)

class Invoice(models.Model):
fullname = models.CharField(null=True, blank=True, max_length=250, verbose_name='Invoice Name')
ctr = models.ForeignKey(CTR, related_name='CTR', verbose_name='CTR')
invoiceNo = models.CharField(max_length=6)
invoiceDate = models.DateField(null=True, verbose_name='Invoice Date')
invoiceStatus = models.ForeignKey(InvStatus, verbose_name='Status')
currency = models.CharField(null=False, max_length=3, verbose_name='Currency')
exchangeRate = models.FloatField(verbose_name='exchange rate', default=0.0)
cathieValue = models.FloatField(verbose_name='Cathie Value', default=0.0)
subcontractorValue = models.FloatField(verbose_name='Subcontractor Value', default=0.0)
expensesValue = models.FloatField(verbose_name='Expenses', default=0.0)
deductionValue = models.FloatField(verbose_name='Deduction', default=0.0)
vatInc = models.BooleanField(verbose_name='VAT Included')
netValue = models.FloatField(verbose_name='Net', default=0.0)
vatValue = models.FloatField(verbose_name='VAT', default=0.0)
GrossValue = models.FloatField(verbose_name='Gross', default=0.0)
euroRate = models.DecimalField(verbose_name='Euro Rate', max_digits=5, decimal_places=4)
dollarRate = models.DecimalField(verbose_name='DollarRate', max_digits=5, decimal_places=4)

【问题讨论】:

  • 请展示您的模型。
  • @Gocht 添加了模型。同样,可能有一些变化。
  • 什么是obj?你想得到什么,请把你的问题说清楚。
  • 对不起,我在最初的帖子中表示我是 Django/Python 的新手,但是,它被删除了。
  • @Gocht 基本上,我想根据匹配的日期值用汇率模型中的欧元和美元汇率填充发票模型中的欧元和美元汇率

标签: python django filter model


【解决方案1】:

答案基于您在问题评论部分的解释:

在您的保存覆盖中执行以下操作:

try:
    exrate = exchangeRates.objects.get(date=obj.invoiceDate)
    xeuroRate = exrate.euroRate
    xdollarRate = exrate.dollarRate 
except:
    xeuroRate = 0.0 # set default value
    xdollarRate = 0.0 # set default value

obj.euroRate = xeuroRate
obj.dollarRate = xdollarRate
obj.save()

【讨论】:

  • Anush,抱歉,您之前的解决方案有效。问题是由于发票日期注释在汇率表中匹配。 (我只导入到某个日期。Revices 解决方案显然包括验证以防止“匹配”错误。谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
相关资源
最近更新 更多