
Z czasem, gdy nasze modele się rozrastają, rosną nasze potrzeby związane z bardziej skomplikowanymi zależnościami między danymi. Zaczynamy od zupełnie prostych pól, przechowujących podstawowe dane, takie jak imię, nazwisko czy data urodzenia. W pewnym momencie chcemy jednak mieć możliwość obliczania wieku dynamicznie. Z pomocą przyjdzie nam dekorator property.
Innym przykładem może być użycie property do wyświetlania danych w innej formie lub dodania do nich stałych składowych. Poniżej przykład klasy do generowania linków przekierowujących:
#models.py
class Link(models.Model):
url = models.URLField()
alias = models.CharField(max_length=20)@property
def generated_url(self):
return '/l/' + str(self.alias)
Ale po co nam w ogóle to property? Nie wystarczy nam użycie 'generated_url' jako funkcji?
Dekorator property pozwala traktować wywołaną funkcję jako pole. Ma to świetne zastosowanie, jeśli chcemy skorzystać z jej wartości w panelu administracyjnym (przykład poniżej) lub w szablonie:
#admin.py
class LinkAdmin(admin.ModelAdmin):
list_display = ['alias', 'generated_url', 'url']
readonly_fields = ['generated_url']admin.site.register(Link, LinkAdmin)
"list_display" pozwala nam zdefiniować, które pola modelu chcemy wyświetlić w panelu administracyjnym.
"readonly_fields" służy do określania, które pola są wyświetlą się w panelu administracyjnym tylko do odczytu.
0 Komentarze