Я столкнулся с интересной проблемой в Python с Django. Я думаю, просто разместив мой код, вы получите то, что я пытаюсь сделать.
views.py:
def ingredients(request):
objects = Ingredient.objects.all()[:50]
return render(request, 'template.html', {'objects': objects}
models.py:
class Ingredient(models.Model):
stock_by = models.IntegerField(null=False)
unit = ""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
unit_type = {
1: 'Units',
2: 'Kilograms',
3: 'Litters'
}
self.unit = unit_type[IntegerField.to_python(self.cost_by)]
Ошибка:
TypeError at /Ingredient/
to_python() missing 1 required positional argument: 'value'
(значение - Нет).
init .py (Django базовый класс):
class IntegerField(field):
def to_python(self, value):
if value is None:
return value
try:
return int(value)
except (TypeError, ValueError):
raise exceptions.ValidationError(
self.error_messages['invalid'],
code='invalid',
params={'value': value},
)
I думаю понятно что я пытаюсь добиться. Просто атрибут String, который будет принимать имя значения единицы (представленное целыми числами в дБ).