Source code for richy.etfs.models
from django.core.cache import cache
from django.db import models
from ..core.models import BaseDividend, Item, ItemData
from ..indexes.models import Index
[docs]
class Etf(Item):
item_type = Item.Type.ETF
indexes = models.ManyToManyField(Index, blank=True)
def is_share(self):
return False
def is_index(self):
return False
def is_etf(self):
return True
def is_coin(self):
return False
# ItemData access methods.
[docs]
def set_holdings(self, data):
try:
record = self.itemdata
record.data["holdings"] = data
except ItemData.DoesNotExist:
record = ItemData(item=self, data={"holdings": data})
record.save()
[docs]
def get_holdings(self):
try:
return self.itemdata.data["holdings"]
except (ItemData.DoesNotExist, KeyError):
return None
[docs]
def update_cache(self):
super().update_cache()
from ..transactions.transactions import Performance
cache.delete("etfs-transaction-performance-and-assets")
cache.delete("etfs-transaction-profit-performance")
Performance("etf", profit=False, use_cache=False).get_data()
Performance("etf", profit=True, use_cache=False).get_data()
[docs]
class Dividend(BaseDividend):
etf = models.ForeignKey(Etf, on_delete=models.CASCADE)