Как запустить функцию, если поле экземпляра модели равно inplay (Django) - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть модель, которая обновляется фоновой задачей каждые несколько секунд.Я хотел бы выполнить функцию, когда экземпляр состояния атрибута изменится на inplay

Я просмотрел документацию и примеры, но не могу найти то, что ищу.Будут ли сигналы лучшим вариантом для вызова функции после изменения поля экземпляра модели на inplay '?

from django.db import models

class testModel(models.Model):     
    player1 = models.CharField(null=True, max_length=50)
    player2 = models.CharField(null=True, max_length=50)
    Player1_odds = models.FloatField(null=True)
    Player2_odds = models.FloatField(null=True)
    status = models.CharField(null=True, max_length=10)
    complete = models.CharField(null=True, max_length=10)

 from django.dispatch import receiver
 from django.db.models.signals import pre_save, pre_delete, post_save, 
 post_delete
 from django.dispatch import receiver


@receiver(post_save, sender=testModel)
def post_save(sender, instance, created, **kwargs):
    # if status is = inplay call  send
    #
    #
         pass
 def send()
   # run bet

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Вы должны выбрать переопределенный метод сохранения, а не сигналы, потому что ваши изменения относятся только к testModel.Вот как вы можете переопределить метод сохранения:

class testModel(models.Model): 
     status = models.CharField(null=True, max_length=10)          
     # your other model fields
     def save(self):
         super(testModel, self).save() # this will save model
         if self.status == 'inplay':# this will check if the status is "inplay" after change
            send()
0 голосов
/ 04 февраля 2019

Да, вы можете использовать сигналы для этого.В вашем случае вы можете получить статус обновления из экземпляра.

@receiver(post_save, sender=testModel)
def post_save(sender, instance, created, **kwargs):
    if instance.status == 'inplay':
       send()
...