More Related Content Similar to A brief history of Django model syntax Similar to A brief history of Django model syntax (20) More from Jacob Kaplan-Moss More from Jacob Kaplan-Moss (12) A brief history of Django model syntax3. cms/apps/polls/dblayout.sql
BEGIN;
CREATE TABLE polls (
id serial PRIMARY KEY,
label varchar(20) NOT NULL, -- used by the template and possibly by the URL
release_date timestamp with time zone NOT NULL,
expire_date timestamp with time zone NOT NULL,
question varchar(255) NOT NULL
);
CREATE INDEX polls_label ON polls (label);
CREATE TABLE poll_choices (
id serial PRIMARY KEY,
polls_id integer REFERENCES polls(id),
choice varchar(255) NOT NULL,
votes integer NOT NULL DEFAULT 0
);
CREATE TABLE poll_logged_votes (
poll_id integer NOT NULL REFERENCES polls(id),
choice_id integer NOT NULL REFERENCES poll_choices(id),
ip_address inet NOT NULL,
vote_time timestamp with time zone NOT NULL,
PRIMARY KEY (poll_id, ip_address, vote_time)
);
CREATE TABLE polls_sites (
polls_id integer NOT NULL REFERENCES polls(id),
sites_id integer NOT NULL REFERENCES sites(id),
PRIMARY KEY (polls_id, sites_id)
);
COMMIT; 4. cms/apps/polls/polls.py
class PollDoesNotExist(ObjectDoesNotExist):
pass
class ChoiceDoesNotExist(ObjectDoesNotExist):
pass
# ...
class Poll:
def __init__(self, id, label, release_date, expire_date, question):
# ...
def save(self):
# ...
def get_choices(self):
# ...
# ...
def get_poll_by_id(poll_id):
# ...
def get_poll_by_label(label, year, month):
# ...
def get_poll_list(year=None, month=None):
# ... 6. cms/datadescriptions/polls.py
class Poll(gen.DataDescription):
app_name = APP_NAME
app_label = APP_LABEL
module_name = 'polls'
object_name = 'Poll'
object_name_verbose = 'poll'
db_table = 'polls'
representation = ['return self.question']
fields = (
gen.AutoincrementField('id', 'ID', primary_key=True),
gen.SlugField('slug', 'slug', unique_for_month='pub_date'),
gen.CharacterField('question', 'question', maxlength=255),
gen.DatetimeField('pub_date', 'date published',
create_list_lookup_function=True, lookup=gen.DATEPART, create_next_previous=True),
gen.DatetimeField('expire_date', 'expiration date'),
gen.ManyToManyField('sites', 'sites', can_be_blank=True,
relationship=gen.ManyToManyRelation(core.Site, 'site_id')),
)
list_ordering_tuple = (('pub_date', gen.ORDER_ASCENDING),)
exceptions = (
('AlreadyVoted', None),
('PollClosed', None),
('InvalidVote', quot;An attempt to vote for a choice that isn't associated with the given pollquot;)
)
generate_admin = True
hierarchical_admin = (gen.BY_DATE, 'pub_date')
add_permission = ('add_poll', 'Can add polls')
change_permission = ('change_poll', 'Can change polls')
template_admin_form = 'polls_form'
admin_url = 'polls'
admin_field_conf = (
(None, {'classes': ('aligned',), 'fields': ('question', 'slug', 'pub_date', 'expire_date', 'sites')}),
)
extra_model_code_top = quot;from settings import POLL_VOTE_INTERVALquot; 8. r8825
June 2005
First public Django release 9. ellington/polls/models/polls.py
class Poll(meta.Model):
db_table = 'polls'
fields = (
meta.SlugField('slug', 'slug', unique_for_month='pub_date'),
meta.CharField('question', 'question', maxlength=255),
meta.DateTimeField('pub_date', 'date published'),
meta.DateTimeField('expire_date', 'expiration date'),
meta.ManyToManyField(core.Site),
meta.PositiveSmallIntegerField('choice_votes', 'choice votes', default=1,
help_text=quot;How many choices a person can vote for at once.quot;),
)
ordering = ('-pub_date',)
exceptions = ('AlreadyVoted', 'PollClosed', 'InvalidVote', 'TooFewChoices', 'TooManyChoices')
get_latest_by = 'pub_date'
admin = meta.Admin(
fields = (
(None, {'fields': ('question', 'slug', 'pub_date', 'expire_date', 'sites', 'choice_vo
),
list_display = ('question', 'pub_date', 'expire_date'),
list_filter = ('sites', 'pub_date'),
date_hierarchy = 'pub_date',
search_fields = ('question', 'slug'),
) 11. ellington/polls/models/polls.py
class Poll(meta.Model):
slug = meta.SlugField(unique_for_month='pub_date')
question = meta.CharField(maxlength=255)
pub_date = meta.DateTimeField('date published')
expire_date = meta.DateTimeField('expiration date')
sites = meta.ManyToManyField(core.Site)
choice_votes = meta.PositiveSmallIntegerField(default=1)
class META:
db_table = 'polls'
ordering = ('-pub_date',)
exceptions = ('AlreadyVoted', 'PollClosed', 'InvalidVote', 'TooFewChoices', 'TooManyChoic
get_latest_by = 'pub_date'
admin = meta.Admin(
fields = (
(None, {'fields': ('question', 'slug', 'pub_date', 'expire_date', 'sites')}),
),
list_display = ('question', 'pub_date', 'expire_date'),
list_filter = ('sites', 'pub_date'),
date_hierarchy = 'pub_date',
search_fields = ('question', 'slug'),
) 13. ellington/polls/models.py
class Poll(models.Model):
slug = models.SlugField(unique_for_month='pub_date')
question = models.CharField(maxlength=255)
pub_date = models.DateTimeField('date published')
expire_date = models.DateTimeField('expiration date')
sites = models.ManyToManyField(core.Site)
choice_votes = models.PositiveSmallIntegerField(default=1)
class Meta:
ordering = ('-pub_date',)
get_latest_by = 'pub_date'
class Admin:
list_display = ('question', 'pub_date', 'expire_date')
list_filter = ('sites', 'pub_date')
date_hierarchy = 'pub_date'
search_fields = ('question', 'slug')
save_as = True 15. ellington/polls/admin.py
from ellington.polls.models import Poll
class PollOptions:
list_display = ('question', 'pub_date', 'expire_date')
list_filter = ('sites', 'pub_date')
date_hierarchy = 'pub_date'
search_fields = ('question', 'slug')
save_as = True
admin.site.register(Poll, PollOptions)