我在哪里/如何执行models.py中包含的这个函数?

时间:2018-06-11 01:35:03

标签: python django

我需要为每个Bet实例执行get_result()函数

models.py

class Bet(models.Model):
  user = models.ForeignKey(User, related_name='bets', blank=True, on_delete=models.CASCADE)
  match = models.ForeignKey(Match, on_delete=models.CASCADE, related_name='bets') 
  team1_score = models.PositiveIntegerField(default=0)
  team2_score = models.PositiveIntegerField(default=0)
  result = models.PositiveIntegerField(default=0, null=True)

  def get_result(self):
    if (self.match.get_endscore() == self.match.team1) and (self.team1_score > self.team2_score):
      self.result = 3
    elif (self.match.get_endscore() == self.match.team2) and (self.team2_score > self.team1_score):
      self.result = 3
    elif (self.match.get_endscore() == "tie") and (self.team1_score == self.team2_score):
      self.result = 3
    elif (self.match.team1_score == self.team1_score) and (self.match.team2_score == self.team2_score):
      self.result = 6
    else: 
      self.result = 0
    return self.result

我认为这个功能出来了:

range = Bet.objects.all()
for bet in range:
  bet.get_result()
  bet.save()

我不完全确定的部分是执行它的位置,或者我是否可以将该函数插入到脚本中并使用其他工具在给定时间执行它(例如异步处理)

我对此很新,我可能没有足够的专业知识来解决它,我甚至不确定是否可以做到。

1 个答案:

答案 0 :(得分:2)

这似乎是management command的合适人选。

在您的app文件夹中,创建文件夹结构management/commands并添加文件my_command.py(您应该选择一个更好的名称来反映您的命令实际执行的操作)。

在该文件中将如下所示:

from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def handle(self, *args, **options):
        # your code here

然后,您就可以将其作为python manage.py mycommand运行。