Какой механизм стоит за оператором "print", который работает как оператор "if"?

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

В моем models.py,

class Order(models.Model):
    quantity = models.IntegerField()
    price = models.IntegerField()

В моем admin.py,

class OrderAdmin(admin.ModelAdmin):
    fields = ["quantity", "price", "get_total", ]
    readonly_fields = ["get_total", ]

    def get_total(self, obj):
        return obj.quantity * obj.price

При добавлении нового в админке выкидывает TypeError: unsupported operand type(s) for *: 'NoneType' and 'NoneType'.

Я могу решить это, изменив метод get_total:

def get_total(self, obj):
    if obj:
        return obj.quantity * obj.price

Однако, я также могу решить эту проблему, добавив print:

def get_total(self, obj):
    print(obj)
    return self.quantity * self.price

Я обнаружил это во время отладки. Результаты оказались без разницы. В консоль ничего не выводилось.

Что за магия скрывается за print?

Кстати, я использую Python 3.9.6 и Django 3.2.12.

Вернуться на верх