对不起,也许我的标题不是很清楚,但我不知道如何写它。
我有一个锦标赛模型可以保存比赛结果,如:
class Tournament(model.Model):
team_1_score = models.PositiveSmallIntegerField(blank=True, default=0)
team_2_score = models.PositiveSmallIntegerField(blank=True, default=0)
team_1_point = models.PositiveSmallIntegerField(blank=True, default=0)
team_2_point = models.PositiveSmallIntegerField(blank=True, default=0)
@receiver(pre_save, sender='tournament.Tournament')
def my_callback(sender, instance, *args, **kwargs):
if instance.team_1_score > instance.team_2_score:
instance.team_1_point += 2
elif instance.team_2_score > instance.team_1_score:
instance.team_2_point += 2
elif instance.team_2_score == instance.team_1_score:
instance.team_2_point += 1
instance.team_1_point += 1
我创建了pre_save
方法,该方法应自动更新team_1_point
和team_2_point
值。但问题是我的default
值设置为0
,当然我的pre_save
方法为两个团队提供了1分。
你能帮我制作一个能正常工作的算法吗?即使我将default
设置为""
或者只是将其保留,也意味着它们是相同的,无论如何我的方法都会给予分数。
答案 0 :(得分:0)
这很容易,您只需声明一个全局变量x = True
,然后在您的my_callback
中就像
if x:
x = False
return
if instance.team_1_score > instance.team_2_score:
instance.team_1_point += 2
elif instance.team_2_score > instance.team_1_score:
instance.team_2_point += 2
elif instance.team_2_score == instance.team_1_score:
instance.team_2_point += 1
instance.team_1_point += 1
答案 1 :(得分:0)
这个片段怎么样,
def my_callback(sender, instance, *args, **kwargs):
if not (instance.team_1_score == instance.team_2_score == 0): # change is here <<<<
if instance.team_1_score > instance.team_2_score:
instance.team_1_point += 2
elif instance.team_2_score > instance.team_1_score:
instance.team_2_point += 2
elif instance.team_2_score == instance.team_1_score:
instance.team_2_point += 1
instance.team_1_point += 1
修改-1 强>
在我的回答中更改if
条件如下,
if not (instance.team_1_score is None and instance.team_2_score is None):
#do above
然后将default
中的models.py
值设为None