title: When should you use @property in a model class?
body: <p>When reading the <a href="https://docs.djangoproject.com/en/3.0/glossary/#term-property" rel="nofollow noreferrer">docs</a>, there is very little information how and why to use @property in a class. All I can find is:</p>
  
  <blockquote>
    <p>Also known as “managed attributes”, and a feature of Python since version 2.2. This is a neat way to implement attributes whose usage resembles attribute access, but whose implementation uses method calls.</p>
  </blockquote>
  
  <p>When I have a function inside a model like <code>def get_absolute_url(self):</code> should I be decorating it with <code>@property</code>?</p>
  
  <pre><code>@property
  def get_absolute_url(self):
      pass
  </code></pre>
  
  <p>What is the difference between an un-decorated <code>def</code> and one decorated with <code>@property</code>? When should I use it and when not?</p>