Когда инициализируются Django объекты модели? - PullRequest
0 голосов
/ 07 марта 2020

Я столкнулся с интересной проблемой в 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, который будет принимать имя значения единицы (представленное целыми числами в дБ).

1 Ответ

1 голос
/ 07 марта 2020

to_python - это метод экземпляра, который вы должны вызывать из экземпляра, а не из класса.

IntegerField().to_python(self.cost_by)
...