Джанго рассчитал поле сразу - PullRequest
0 голосов
/ 12 октября 2018

Какова лучшая практика для создания вычисляемого поля и немедленного отображения в форме?

Пример:

class User(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True)  # Field name made lowercase.
    price=models.IntegerField(db_column='Price')
    extra_price=models.DecimalField(db_column='extra_price')
    ...

@register(Test)
class TestAdmin(admin.ModelAdmin):
    readonly_fields=['extra_price']

Когда я добавляю новую запись для тестового режима, мне хотелось быпоказать в поле extra_price значение eval extra_price=price*0,60.

Как я могу это сделать?

Спасибо

1 Ответ

0 голосов
/ 12 октября 2018

Одно простое и элегантное решение - определить property() в вашей модели и использовать его в вашей модели admin

class User(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True)  # Field name made lowercase.
    price = models.IntegerField(db_column='Price')
    extra_field = models.DecimalField(db_column='extra_field')

    <b>@property
    def my_logic(self):
        return self.price * 123456</b> # return whatever you want


@register(Test)
class TestAdmin(admin.ModelAdmin):
    <b>readonly_fields = ['my_logic']</b>
...