У меня есть несколько рынков, перечисленных в интерфейсе администратора, и я ищу решение, чтобы заполнить рынок ценовой историей, нажав на кнопку в столбце (без массовой операции). Заполнить рынок означает ввести список свечей, связанных с этим рынком, как определено моделью candle
. Каков наилучший способ сделать это?
До сих пор я могу создать кнопку в разделе администратора с помощью django.utils.format_html
, но я не знаю, как связать кнопку с методом exchange.populateMarket()
.
admin.py
@admin.register(Market)
class CustomerAdmin(admin.ModelAdmin):
list_display = (
'market',
'action'
)
def action(self, obj):
return html.format_html(
'<a class="button" name="print_bnt" href="{}">Populate</a>',
'populate'
)
action.short_description = 'Actions'
action.allow_tags = True
models.py
# model for markets
class Market(models.Model):
exchange = models.ForeignKey(Exchange,
on_delete=models.CASCADE,
related_name='exchange'
)
pair = models.CharField(max_length=10)
def __str__(self):
return self.get_pair_display()
# model for candlesticks
class Candle(models.Model):
market = models.ForeignKey(Market,
on_delete=models.CASCADE,
related_name='market',
null= True
)
timestamp = models.DateTimeField(unique=True)
volume = models.PositiveIntegerField()
op = models.DecimalField(max_digits=20, decimal_places=10, verbose_name='open')
hi = models.DecimalField(max_digits=20, decimal_places=10, verbose_name='high')
lo = models.DecimalField(max_digits=20, decimal_places=10, verbose_name='low')
cl = models.DecimalField(max_digits=20, decimal_places=10, verbose_name='close')
def __str__(self):
return self.get_timestamp_display()
exchange.py
def populateMarket():
# download price serie
candles = fetchMarket()
# create an object for each candle
for c in candles:
...