thirdparty/google_appengine/lib/django/tests/modeltests/properties/models.py
author Daniel Bentley <dbentley@google.com>
Fri, 20 Mar 2009 08:11:59 +0000
changeset 1943 596dbffbffe0
parent 109 620f9b141567
permissions -rwxr-xr-x
A script for writing the application name into an app.yaml based on an app.yaml.template. My first check-in. I apologize if I forgot, overlooked, or just plum messed something up. I'm sure I have. I'll fix it, and appreciate any review you can give.

"""
22. Using properties on models

Use properties on models just like on any other Python object.
"""

from django.db import models

class Person(models.Model):
    first_name = models.CharField(maxlength=30)
    last_name = models.CharField(maxlength=30)

    def _get_full_name(self):
        return "%s %s" % (self.first_name, self.last_name)

    def _set_full_name(self, combined_name):
        self.first_name, self.last_name = combined_name.split(' ', 1)

    full_name = property(_get_full_name)

    full_name_2 = property(_get_full_name, _set_full_name)

__test__ = {'API_TESTS':"""
>>> a = Person(first_name='John', last_name='Lennon')
>>> a.save()
>>> a.full_name
'John Lennon'

# The "full_name" property hasn't provided a "set" method.
>>> a.full_name = 'Paul McCartney'
Traceback (most recent call last):
    ...
AttributeError: can't set attribute

# But "full_name_2" has, and it can be used to initialise the class.
>>> a2 = Person(full_name_2 = 'Paul McCartney')
>>> a2.save()
>>> a2.first_name
'Paul'
"""}