using properties in Django Admin
I have a model with field defined as
p = models.DecimalField(max_digits=12, decimal_places=6)开发者_运维问答
But the decimal_places=6 is only for internal accuracy. I only want 2 decimal_places to show up in the admin fields. So I thought perhaps I could do something with properties. But properties don't show up as fields in the Admin interface. E.g.: database record: 100.256754 admin edit field shows: 100.26
Is there a way to do this?
I'm with wlashell -- your edit form should display the raw value; otherwise, you'd be indirectly modifying the value each time the object got modified, even if the actual field wasn't changed at all. Probably not what you want.
If you'd simply like to change the way the field displays in the change list (for readability, perhaps), you can define a method on your model class like so:
from django.db import models
from django.template.defaultfilters import floatformat
class MyModel(models.Model):
p = models.DecimalField(max_digits=12, decimal_places=6, verbose_name='My Field Name')
...
def display_p(self):
"""Format `p` to 2 decimal places, for readability."""
return floatformat(self.p, 2)
display_p.short_description = 'My Field Name'
display_p.admin_order_field = 'p'
Then, in your ModelAdmin subclass list_display
you'd include display_p
instead of p
:
from django.contrib import admin
from myapp.models import MyModel
class MyModelAdmin(admin.ModelAdmin):
list_display = ['display_p', ...]
...
admin.site.register(MyModel, MyModelAdmin)
HTH.
If you want to simply display the value of the field but not make it editable you could use a custom template, or some javascript to mask / alter the value.
I have to question the wisdom though, of hiding the remaining digits from someone looking at the data. This smells like a disaster in the making as a person editing a field like that if you hid the values would not know what the full value is. If you really don't care about that from the user side, why store it in that manner at all.
精彩评论