定义正确的条件以检查整数字段的相等性

时间:2018-03-09 02:27:54

标签: python django

对不起,也许我的标题不是很清楚,但我不知道如何写它。

我有一个锦标赛模型可以保存比赛结果,如:

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_pointteam_2_point值。但问题是我的default值设置为0,当然我的pre_save方法为两个团队提供了1分。

你能帮我制作一个能正常工作的算法吗?即使我将default设置为""或者只是将其保留,也意味着它们是相同的,无论如何我的方法都会给予分数。

2 个答案:

答案 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