如果模型实例字段等于inplay(Django),如何运行函数

2024-04-23 14:38:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模型,每隔几秒钟就有后台任务更新一次。 我想在属性状态的实例更改为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

Tags: django实例from模型importtruemodelssave
2条回答

是的,你可以用信号。在您的情况下,可以从实例获取更新状态。你知道吗

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

您应该选择重写save方法而不是signals,因为您的更改只特定于testModel。下面是重写save方法的方法:

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()

相关问题 更多 >