mirror of
https://github.com/django/django.git
synced 2025-07-04 17:59:13 +00:00
boulder-oracle-sprint: Merged to [5127]
git-svn-id: http://code.djangoproject.com/svn/django/branches/boulder-oracle-sprint@5128 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
3b479bfc56
commit
5a7802586d
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -22,5 +22,7 @@ def url(regex, view, kwargs=None, name=None, prefix=''):
|
|||||||
# For include(...) processing.
|
# For include(...) processing.
|
||||||
return RegexURLResolver(regex, view[0], kwargs)
|
return RegexURLResolver(regex, view[0], kwargs)
|
||||||
else:
|
else:
|
||||||
return RegexURLPattern(regex, prefix and (prefix + '.' + view) or view, kwargs, name)
|
if prefix and isinstance(view, basestring):
|
||||||
|
view = prefix + '.' + view
|
||||||
|
return RegexURLPattern(regex, view, kwargs, name)
|
||||||
|
|
||||||
|
@ -346,11 +346,13 @@ class Field(object):
|
|||||||
return self._choices
|
return self._choices
|
||||||
choices = property(_get_choices)
|
choices = property(_get_choices)
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, form_class=forms.CharField, **kwargs):
|
||||||
"Returns a django.newforms.Field instance for this database Field."
|
"Returns a django.newforms.Field instance for this database Field."
|
||||||
defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
||||||
|
if self.choices:
|
||||||
|
defaults['widget'] = forms.Select(choices=self.get_choices())
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return forms.CharField(**defaults)
|
return form_class(**defaults)
|
||||||
|
|
||||||
def value_from_object(self, obj):
|
def value_from_object(self, obj):
|
||||||
"Returns the value of this field in the given model instance."
|
"Returns the value of this field in the given model instance."
|
||||||
@ -410,9 +412,9 @@ class BooleanField(Field):
|
|||||||
return [oldforms.CheckboxField]
|
return [oldforms.CheckboxField]
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
defaults = {'form_class': forms.BooleanField}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return forms.BooleanField(**defaults)
|
return super(BooleanField, self).formfield(**defaults)
|
||||||
|
|
||||||
class CharField(Field):
|
class CharField(Field):
|
||||||
def get_manipulator_field_objs(self):
|
def get_manipulator_field_objs(self):
|
||||||
@ -429,9 +431,9 @@ class CharField(Field):
|
|||||||
return str(value)
|
return str(value)
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
defaults = {'max_length': self.maxlength, 'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
defaults = {'max_length': self.maxlength}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return forms.CharField(**defaults)
|
return super(CharField, self).formfield(**defaults)
|
||||||
|
|
||||||
# TODO: Maybe move this into contrib, because it's specialized.
|
# TODO: Maybe move this into contrib, because it's specialized.
|
||||||
class CommaSeparatedIntegerField(CharField):
|
class CommaSeparatedIntegerField(CharField):
|
||||||
@ -507,9 +509,9 @@ class DateField(Field):
|
|||||||
return {self.attname: (val is not None and val.strftime("%Y-%m-%d") or '')}
|
return {self.attname: (val is not None and val.strftime("%Y-%m-%d") or '')}
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
defaults = {'form_class': forms.DateField}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return forms.DateField(**defaults)
|
return super(DateField, self).formfield(**defaults)
|
||||||
|
|
||||||
class DateTimeField(DateField):
|
class DateTimeField(DateField):
|
||||||
def to_python(self, value):
|
def to_python(self, value):
|
||||||
@ -576,9 +578,9 @@ class DateTimeField(DateField):
|
|||||||
time_field: (val is not None and val.strftime("%H:%M:%S") or '')}
|
time_field: (val is not None and val.strftime("%H:%M:%S") or '')}
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
defaults = {'form_class': forms.DateTimeField}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return forms.DateTimeField(**defaults)
|
return super(DateTimeField, self).formfield(**defaults)
|
||||||
|
|
||||||
class EmailField(CharField):
|
class EmailField(CharField):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
@ -595,9 +597,9 @@ class EmailField(CharField):
|
|||||||
validators.isValidEmail(field_data, all_data)
|
validators.isValidEmail(field_data, all_data)
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
defaults = {'form_class': forms.EmailField}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return forms.EmailField(**defaults)
|
return super(EmailField, self).formfield(**defaults)
|
||||||
|
|
||||||
class FileField(Field):
|
class FileField(Field):
|
||||||
def __init__(self, verbose_name=None, name=None, upload_to='', **kwargs):
|
def __init__(self, verbose_name=None, name=None, upload_to='', **kwargs):
|
||||||
@ -732,9 +734,9 @@ class IntegerField(Field):
|
|||||||
return [oldforms.IntegerField]
|
return [oldforms.IntegerField]
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
defaults = {'form_class': forms.IntegerField}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return forms.IntegerField(**defaults)
|
return super(IntegerField, self).formfield(**defaults)
|
||||||
|
|
||||||
class IPAddressField(Field):
|
class IPAddressField(Field):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
@ -771,9 +773,9 @@ class PhoneNumberField(IntegerField):
|
|||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
from django.contrib.localflavor.us.forms import USPhoneNumberField
|
from django.contrib.localflavor.us.forms import USPhoneNumberField
|
||||||
defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
defaults = {'form_class': USPhoneNumberField}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return USPhoneNumberField(**defaults)
|
return super(PhoneNumberField, self).formfield(**defaults)
|
||||||
|
|
||||||
class PositiveIntegerField(IntegerField):
|
class PositiveIntegerField(IntegerField):
|
||||||
def get_manipulator_field_objs(self):
|
def get_manipulator_field_objs(self):
|
||||||
@ -804,9 +806,9 @@ class TextField(Field):
|
|||||||
return [oldforms.LargeTextField]
|
return [oldforms.LargeTextField]
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
defaults = {'required': not self.blank, 'widget': forms.Textarea, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
defaults = {'widget': forms.Textarea}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return forms.CharField(**defaults)
|
return super(TextField, self).formfield(**defaults)
|
||||||
|
|
||||||
class TimeField(Field):
|
class TimeField(Field):
|
||||||
empty_strings_allowed = False
|
empty_strings_allowed = False
|
||||||
@ -864,9 +866,9 @@ class TimeField(Field):
|
|||||||
return {self.attname: (val is not None and val.strftime("%H:%M:%S") or '')}
|
return {self.attname: (val is not None and val.strftime("%H:%M:%S") or '')}
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
defaults = {'form_class': forms.TimeField}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return forms.TimeField(**defaults)
|
return super(TimeField, self).formfield(**defaults)
|
||||||
|
|
||||||
class URLField(CharField):
|
class URLField(CharField):
|
||||||
def __init__(self, verbose_name=None, name=None, verify_exists=True, **kwargs):
|
def __init__(self, verbose_name=None, name=None, verify_exists=True, **kwargs):
|
||||||
@ -883,9 +885,9 @@ class URLField(CharField):
|
|||||||
return "CharField"
|
return "CharField"
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
defaults = {'required': not self.blank, 'verify_exists': self.verify_exists, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
defaults = {'form_class': forms.URLField, 'verify_exists': self.verify_exists}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return forms.URLField(**defaults)
|
return super(URLField, self).formfield(**defaults)
|
||||||
|
|
||||||
class USStateField(Field):
|
class USStateField(Field):
|
||||||
def get_manipulator_field_objs(self):
|
def get_manipulator_field_objs(self):
|
||||||
|
@ -550,9 +550,9 @@ class ForeignKey(RelatedField, Field):
|
|||||||
setattr(cls, related.get_accessor_name(), ForeignRelatedObjectsDescriptor(related))
|
setattr(cls, related.get_accessor_name(), ForeignRelatedObjectsDescriptor(related))
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
defaults = {'queryset': self.rel.to._default_manager.all(), 'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
defaults = {'form_class': forms.ModelChoiceField, 'queryset': self.rel.to._default_manager.all()}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return forms.ModelChoiceField(**defaults)
|
return super(ForeignKey, self).formfield(**defaults)
|
||||||
|
|
||||||
class OneToOneField(RelatedField, IntegerField):
|
class OneToOneField(RelatedField, IntegerField):
|
||||||
def __init__(self, to, to_field=None, **kwargs):
|
def __init__(self, to, to_field=None, **kwargs):
|
||||||
@ -616,9 +616,9 @@ class OneToOneField(RelatedField, IntegerField):
|
|||||||
cls._meta.one_to_one_field = self
|
cls._meta.one_to_one_field = self
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
defaults = {'queryset': self.rel.to._default_manager.all(), 'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
defaults = {'form_class': forms.ModelChoiceField, 'queryset': self.rel.to._default_manager.all()}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return forms.ModelChoiceField(**defaults)
|
return super(OneToOneField, self).formfield(**defaults)
|
||||||
|
|
||||||
class ManyToManyField(RelatedField, Field):
|
class ManyToManyField(RelatedField, Field):
|
||||||
def __init__(self, to, **kwargs):
|
def __init__(self, to, **kwargs):
|
||||||
@ -735,13 +735,13 @@ class ManyToManyField(RelatedField, Field):
|
|||||||
return getattr(obj, self.attname).all()
|
return getattr(obj, self.attname).all()
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
|
defaults = {'form_class': forms.ModelMultipleChoiceField, 'queryset': self.rel.to._default_manager.all()}
|
||||||
|
defaults.update(kwargs)
|
||||||
# If initial is passed in, it's a list of related objects, but the
|
# If initial is passed in, it's a list of related objects, but the
|
||||||
# MultipleChoiceField takes a list of IDs.
|
# MultipleChoiceField takes a list of IDs.
|
||||||
if kwargs.get('initial') is not None:
|
if defaults.get('initial') is not None:
|
||||||
kwargs['initial'] = [i._get_pk_val() for i in kwargs['initial']]
|
defaults['initial'] = [i._get_pk_val() for i in defaults['initial']]
|
||||||
defaults = {'queryset' : self.rel.to._default_manager.all(), 'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
|
return super(ManyToManyField, self).formfield(**defaults)
|
||||||
defaults.update(kwargs)
|
|
||||||
return forms.ModelMultipleChoiceField(**defaults)
|
|
||||||
|
|
||||||
class ManyToOneRel(object):
|
class ManyToOneRel(object):
|
||||||
def __init__(self, to, field_name, num_in_admin=3, min_num_in_admin=None,
|
def __init__(self, to, field_name, num_in_admin=3, min_num_in_admin=None,
|
||||||
|
@ -204,7 +204,7 @@ class Lexer(object):
|
|||||||
def create_token(self, token_string, in_tag):
|
def create_token(self, token_string, in_tag):
|
||||||
"""
|
"""
|
||||||
Convert the given token string into a new Token object and return it.
|
Convert the given token string into a new Token object and return it.
|
||||||
If tag is True, we are processing something that matched a tag,
|
If in_tag is True, we are processing something that matched a tag,
|
||||||
otherwise it should be treated as a literal string.
|
otherwise it should be treated as a literal string.
|
||||||
"""
|
"""
|
||||||
if in_tag:
|
if in_tag:
|
||||||
@ -239,7 +239,7 @@ class DebugLexer(Lexer):
|
|||||||
|
|
||||||
def create_token(self, token_string, source, in_tag):
|
def create_token(self, token_string, source, in_tag):
|
||||||
token = super(DebugLexer, self).create_token(token_string, in_tag)
|
token = super(DebugLexer, self).create_token(token_string, in_tag)
|
||||||
token.source = source
|
token.source = self.origin, source
|
||||||
return token
|
return token
|
||||||
|
|
||||||
class Parser(object):
|
class Parser(object):
|
||||||
|
@ -112,7 +112,7 @@ the previous record in the database::
|
|||||||
b4 = Blog(id=3, name='Not Cheddar', tagline='Anything but cheese.')
|
b4 = Blog(id=3, name='Not Cheddar', tagline='Anything but cheese.')
|
||||||
b4.save() # Overrides the previous blog with ID=3!
|
b4.save() # Overrides the previous blog with ID=3!
|
||||||
|
|
||||||
See _`How Django knows to UPDATE vs. INSERT`, below, for the reason this
|
See `How Django knows to UPDATE vs. INSERT`_, below, for the reason this
|
||||||
happens.
|
happens.
|
||||||
|
|
||||||
Explicitly specifying auto-primary-key values is mostly useful for bulk-saving
|
Explicitly specifying auto-primary-key values is mostly useful for bulk-saving
|
||||||
@ -714,7 +714,7 @@ QuerySet methods that do not return QuerySets
|
|||||||
The following ``QuerySet`` methods evaluate the ``QuerySet`` and return
|
The following ``QuerySet`` methods evaluate the ``QuerySet`` and return
|
||||||
something *other than* a ``QuerySet``.
|
something *other than* a ``QuerySet``.
|
||||||
|
|
||||||
These methods do not use a cache (see _`Caching and QuerySets` below). Rather,
|
These methods do not use a cache (see `Caching and QuerySets`_ below). Rather,
|
||||||
they query the database each time they're called.
|
they query the database each time they're called.
|
||||||
|
|
||||||
``get(**kwargs)``
|
``get(**kwargs)``
|
||||||
|
@ -21,20 +21,19 @@ In two lines::
|
|||||||
['to@example.com'], fail_silently=False)
|
['to@example.com'], fail_silently=False)
|
||||||
|
|
||||||
Mail will be sent using the SMTP host and port specified in the `EMAIL_HOST`_
|
Mail will be sent using the SMTP host and port specified in the `EMAIL_HOST`_
|
||||||
and `EMAIL_PORT`_ settings. The `EMAIL_HOST_USER`_ and `EMAIL_HOST_PASSWORD`_
|
and `EMAIL_PORT`_ settings. The `EMAIL_HOST_USER`_ and `EMAIL_HOST_PASSWORD`_
|
||||||
settings, if set, will be used to authenticate to the
|
settings, if set, will be used to authenticate to the SMTP server.
|
||||||
SMTP server.
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
The character set of email sent with ``django.core.mail`` will be set to
|
The character set of email sent with ``django.core.mail`` will be set to
|
||||||
the value of your `DEFAULT_CHARSET setting`_.
|
the value of your `DEFAULT_CHARSET setting`_.
|
||||||
|
|
||||||
.. _DEFAULT_CHARSET setting: ../settings/#DEFAULT_CHARSET
|
.. _DEFAULT_CHARSET setting: ../settings/#default-charset
|
||||||
.. _EMAIL_HOST: ../settings/#EMAIL_HOST
|
.. _EMAIL_HOST: ../settings/#email-host
|
||||||
.. _EMAIL_PORT: ../settings/#EMAIL_PORT
|
.. _EMAIL_PORT: ../settings/#email-port
|
||||||
.. _EMAIL_HOST_USER: ../settings/#EMAIL_HOST_USER
|
.. _EMAIL_HOST_USER: ../settings/#email-host-user
|
||||||
.. _EMAIL_HOST_PASSWORD: ../settings/#EMAIL_HOST_PASSWORD
|
.. _EMAIL_HOST_PASSWORD: ../settings/#email-host-password
|
||||||
|
|
||||||
|
|
||||||
send_mail()
|
send_mail()
|
||||||
|
@ -396,8 +396,9 @@ EMAIL_HOST_PASSWORD
|
|||||||
Default: ``''`` (Empty string)
|
Default: ``''`` (Empty string)
|
||||||
|
|
||||||
Password to use for the SMTP server defined in ``EMAIL_HOST``. This setting is
|
Password to use for the SMTP server defined in ``EMAIL_HOST``. This setting is
|
||||||
used in conjunction with EMAIL_HOST_USER when authenticating to the SMTP server.
|
used in conjunction with ``EMAIL_HOST_USER`` when authenticating to the SMTP
|
||||||
If either of these settings is empty, Django won't attempt authenticaion.
|
server. If either of these settings is empty, Django won't attempt
|
||||||
|
authenticaion.
|
||||||
|
|
||||||
See also ``EMAIL_HOST_USER``.
|
See also ``EMAIL_HOST_USER``.
|
||||||
|
|
||||||
|
@ -24,6 +24,12 @@ a commit=True parameter.
|
|||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
ARTICLE_STATUS = (
|
||||||
|
(1, 'Draft'),
|
||||||
|
(2, 'Pending'),
|
||||||
|
(3, 'Live'),
|
||||||
|
)
|
||||||
|
|
||||||
class Category(models.Model):
|
class Category(models.Model):
|
||||||
name = models.CharField(maxlength=20)
|
name = models.CharField(maxlength=20)
|
||||||
url = models.CharField('The URL', maxlength=40)
|
url = models.CharField('The URL', maxlength=40)
|
||||||
@ -44,6 +50,7 @@ class Article(models.Model):
|
|||||||
writer = models.ForeignKey(Writer)
|
writer = models.ForeignKey(Writer)
|
||||||
article = models.TextField()
|
article = models.TextField()
|
||||||
categories = models.ManyToManyField(Category, blank=True)
|
categories = models.ManyToManyField(Category, blank=True)
|
||||||
|
status = models.IntegerField(choices=ARTICLE_STATUS, blank=True, null=True)
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
import datetime
|
import datetime
|
||||||
@ -147,8 +154,8 @@ Create a couple of Writers.
|
|||||||
>>> w = Writer(name='Bob Woodward')
|
>>> w = Writer(name='Bob Woodward')
|
||||||
>>> w.save()
|
>>> w.save()
|
||||||
|
|
||||||
ManyToManyFields are represented by a MultipleChoiceField, and ForeignKeys are
|
ManyToManyFields are represented by a MultipleChoiceField, ForeignKeys and any
|
||||||
represented by a ChoiceField.
|
fields with the 'choices' attribute are represented by a ChoiceField.
|
||||||
>>> ArticleForm = form_for_model(Article)
|
>>> ArticleForm = form_for_model(Article)
|
||||||
>>> f = ArticleForm(auto_id=False)
|
>>> f = ArticleForm(auto_id=False)
|
||||||
>>> print f
|
>>> print f
|
||||||
@ -160,6 +167,12 @@ represented by a ChoiceField.
|
|||||||
<option value="2">Bob Woodward</option>
|
<option value="2">Bob Woodward</option>
|
||||||
</select></td></tr>
|
</select></td></tr>
|
||||||
<tr><th>Article:</th><td><textarea rows="10" cols="40" name="article"></textarea></td></tr>
|
<tr><th>Article:</th><td><textarea rows="10" cols="40" name="article"></textarea></td></tr>
|
||||||
|
<tr><th>Status:</th><td><select name="status">
|
||||||
|
<option value="" selected="selected">---------</option>
|
||||||
|
<option value="1">Draft</option>
|
||||||
|
<option value="2">Pending</option>
|
||||||
|
<option value="3">Live</option>
|
||||||
|
</select></td></tr>
|
||||||
<tr><th>Categories:</th><td><select multiple="multiple" name="categories">
|
<tr><th>Categories:</th><td><select multiple="multiple" name="categories">
|
||||||
<option value="1">Entertainment</option>
|
<option value="1">Entertainment</option>
|
||||||
<option value="2">It's a test</option>
|
<option value="2">It's a test</option>
|
||||||
@ -200,6 +213,12 @@ current values are inserted as 'initial' data in each Field.
|
|||||||
<option value="2">Bob Woodward</option>
|
<option value="2">Bob Woodward</option>
|
||||||
</select></li>
|
</select></li>
|
||||||
<li>Article: <textarea rows="10" cols="40" name="article">Hello.</textarea></li>
|
<li>Article: <textarea rows="10" cols="40" name="article">Hello.</textarea></li>
|
||||||
|
<li>Status: <select name="status">
|
||||||
|
<option value="" selected="selected">---------</option>
|
||||||
|
<option value="1">Draft</option>
|
||||||
|
<option value="2">Pending</option>
|
||||||
|
<option value="3">Live</option>
|
||||||
|
</select></li>
|
||||||
<li>Categories: <select multiple="multiple" name="categories">
|
<li>Categories: <select multiple="multiple" name="categories">
|
||||||
<option value="1">Entertainment</option>
|
<option value="1">Entertainment</option>
|
||||||
<option value="2">It's a test</option>
|
<option value="2">It's a test</option>
|
||||||
@ -232,6 +251,12 @@ Add some categories and test the many-to-many form output.
|
|||||||
<option value="2">Bob Woodward</option>
|
<option value="2">Bob Woodward</option>
|
||||||
</select></li>
|
</select></li>
|
||||||
<li>Article: <textarea rows="10" cols="40" name="article">Hello.</textarea></li>
|
<li>Article: <textarea rows="10" cols="40" name="article">Hello.</textarea></li>
|
||||||
|
<li>Status: <select name="status">
|
||||||
|
<option value="" selected="selected">---------</option>
|
||||||
|
<option value="1">Draft</option>
|
||||||
|
<option value="2">Pending</option>
|
||||||
|
<option value="3">Live</option>
|
||||||
|
</select></li>
|
||||||
<li>Categories: <select multiple="multiple" name="categories">
|
<li>Categories: <select multiple="multiple" name="categories">
|
||||||
<option value="1" selected="selected">Entertainment</option>
|
<option value="1" selected="selected">Entertainment</option>
|
||||||
<option value="2">It's a test</option>
|
<option value="2">It's a test</option>
|
||||||
@ -310,6 +335,12 @@ the data in the database when the form is instantiated.
|
|||||||
<option value="2">Bob Woodward</option>
|
<option value="2">Bob Woodward</option>
|
||||||
</select></li>
|
</select></li>
|
||||||
<li>Article: <textarea rows="10" cols="40" name="article"></textarea></li>
|
<li>Article: <textarea rows="10" cols="40" name="article"></textarea></li>
|
||||||
|
<li>Status: <select name="status">
|
||||||
|
<option value="" selected="selected">---------</option>
|
||||||
|
<option value="1">Draft</option>
|
||||||
|
<option value="2">Pending</option>
|
||||||
|
<option value="3">Live</option>
|
||||||
|
</select></li>
|
||||||
<li>Categories: <select multiple="multiple" name="categories">
|
<li>Categories: <select multiple="multiple" name="categories">
|
||||||
<option value="1">Entertainment</option>
|
<option value="1">Entertainment</option>
|
||||||
<option value="2">It's a test</option>
|
<option value="2">It's a test</option>
|
||||||
@ -329,6 +360,12 @@ the data in the database when the form is instantiated.
|
|||||||
<option value="3">Carl Bernstein</option>
|
<option value="3">Carl Bernstein</option>
|
||||||
</select></li>
|
</select></li>
|
||||||
<li>Article: <textarea rows="10" cols="40" name="article"></textarea></li>
|
<li>Article: <textarea rows="10" cols="40" name="article"></textarea></li>
|
||||||
|
<li>Status: <select name="status">
|
||||||
|
<option value="" selected="selected">---------</option>
|
||||||
|
<option value="1">Draft</option>
|
||||||
|
<option value="2">Pending</option>
|
||||||
|
<option value="3">Live</option>
|
||||||
|
</select></li>
|
||||||
<li>Categories: <select multiple="multiple" name="categories">
|
<li>Categories: <select multiple="multiple" name="categories">
|
||||||
<option value="1">Entertainment</option>
|
<option value="1">Entertainment</option>
|
||||||
<option value="2">It's a test</option>
|
<option value="2">It's a test</option>
|
||||||
|
@ -217,7 +217,7 @@ class Templates(unittest.TestCase):
|
|||||||
|
|
||||||
# If a variable has a __str__() that returns a Unicode object, the
|
# If a variable has a __str__() that returns a Unicode object, the
|
||||||
# value will be converted to a bytestring.
|
# value will be converted to a bytestring.
|
||||||
'basic-syntax18': (r'{{ var }}', {'var': UnicodeInStrClass()}, '\xc5\xa0\xc4\x90\xc4\x86\xc5\xbd\xc4\x87\xc5\xbe\xc5\xa1\xc4\x91'),
|
'filter-syntax18': (r'{{ var }}', {'var': UnicodeInStrClass()}, '\xc5\xa0\xc4\x90\xc4\x86\xc5\xbd\xc4\x87\xc5\xbe\xc5\xa1\xc4\x91'),
|
||||||
|
|
||||||
### COMMENT SYNTAX ########################################################
|
### COMMENT SYNTAX ########################################################
|
||||||
'comment-syntax01': ("{# this is hidden #}hello", {}, "hello"),
|
'comment-syntax01': ("{# this is hidden #}hello", {}, "hello"),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user