Показать вычисленное значение поля в ModelForm - PullRequest
0 голосов
/ 29 марта 2019

У меня есть объектная модель производительности в моем проекте Django.

class Performance(models.Model):
   performance_id = models.AutoField(primary_key=True)
   name = models.CharField(_('Nom'), max_length=64)
   code = models.CharField(_('Code'), max_length=16, db_index=True, default='')
   type = models.InterField(...)
   value = models.CharField(...)

В интерфейсе администратора у меня есть выделенный класс PerformanceInlineAdmin и PerformanceInlineForm.

ВPerformance объект, если поле значения начинается с «$», то поле содержит вид выражения Reverse Polish Notation (например, "100 450 +" ...).В этом случае отображаемое значение должно быть вычисленным выражением, а не значением открытого текста.

Но я до сих пор не нашел надежного решения.Даже не уверен, что он должен обрабатываться в Form объекте.

Любое предложение приветствуется.

Z.

1 Ответ

0 голосов
/ 02 апреля 2019

Вы можете определить метод внутри вашего InlineAdmin класса, который возвращает поле только для чтения:

class PerformanceInlineAdmin(admin.TabularInline):
    model = Performance
    fields = ['name', 'code', 'type', 'calculated_value']
    readonly_fields = ['calculated_value', ]

    def calculated_value(self, instance):
        if instance.value.startswith("$"):
            return polish_calc(instance.value.strip('$')
        else:
            return instance.value

    calculated_value.short_description = "Calculated value"

Обратите внимание, что если вы определяете метод calculated_value() для самого Performance, вы можете пропустить весь метод в классе встроенного администратора и просто объявить его в readonly_fields.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...