Какой механизм стоит за оператором "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.