Как добавить кнопки в интерфейсе администратора Django для обновления поля модели? - PullRequest
0 голосов
/ 17 января 2020

У меня есть несколько рынков, перечисленных в интерфейсе администратора, и я ищу решение, чтобы заполнить рынок ценовой историей, нажав на кнопку в столбце (без массовой операции). Заполнить рынок означает ввести список свечей, связанных с этим рынком, как определено моделью 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:
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...