2006-05-02 09:31:56 +08:00
|
|
|
"""
|
|
|
|
24. Mutually referential many-to-one relationships
|
|
|
|
|
2008-02-27 05:13:16 +08:00
|
|
|
Strings can be used instead of model literals to set up "lazy" relations.
|
2006-05-02 09:31:56 +08:00
|
|
|
"""
|
|
|
|
|
|
|
|
from django.db.models import *
|
|
|
|
|
|
|
|
class Parent(Model):
|
Removed oldforms, validators, and related code:
* Removed `Manipulator`, `AutomaticManipulator`, and related classes.
* Removed oldforms specific bits from model fields:
* Removed `validator_list` and `core` arguments from constructors.
* Removed the methods:
* `get_manipulator_field_names`
* `get_manipulator_field_objs`
* `get_manipulator_fields`
* `get_manipulator_new_data`
* `prepare_field_objs_and_params`
* `get_follow`
* Renamed `flatten_data` method to `value_to_string` for better alignment with its use by the serialization framework, which was the only remaining code using `flatten_data`.
* Removed oldforms methods from `django.db.models.Options` class: `get_followed_related_objects`, `get_data_holders`, `get_follow`, and `has_field_type`.
* Removed oldforms-admin specific options from `django.db.models.fields.related` classes: `num_in_admin`, `min_num_in_admin`, `max_num_in_admin`, `num_extra_on_change`, and `edit_inline`.
* Serialization framework
* `Serializer.get_string_value` now calls the model fields' renamed `value_to_string` methods.
* Removed a special-casing of `models.DateTimeField` in `core.serializers.base.Serializer.get_string_value` that's handled by `django.db.models.fields.DateTimeField.value_to_string`.
* Removed `django.core.validators`:
* Moved `ValidationError` exception to `django.core.exceptions`.
* For the couple places that were using validators, brought over the necessary code to maintain the same functionality.
* Introduced a SlugField form field for validation and to compliment the SlugField model field (refs #8040).
* Removed an oldforms-style model creation hack (refs #2160).
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8616 bcc190cf-cafb-0310-a4f2-bffc1f526a37
2008-08-27 15:19:44 +08:00
|
|
|
name = CharField(max_length=100)
|
2008-02-27 05:13:16 +08:00
|
|
|
|
|
|
|
# Use a simple string for forward declarations.
|
2006-05-02 09:31:56 +08:00
|
|
|
bestchild = ForeignKey("Child", null=True, related_name="favoured_by")
|
|
|
|
|
|
|
|
class Child(Model):
|
2007-08-05 13:14:46 +08:00
|
|
|
name = CharField(max_length=100)
|
2008-02-27 05:13:16 +08:00
|
|
|
|
|
|
|
# You can also explicitally specify the related app.
|
|
|
|
parent = ForeignKey("mutually_referential.Parent")
|
2006-05-02 09:31:56 +08:00
|
|
|
|
2006-08-27 21:59:47 +08:00
|
|
|
__test__ = {'API_TESTS':"""
|
2006-05-02 09:31:56 +08:00
|
|
|
# Create a Parent
|
|
|
|
>>> q = Parent(name='Elizabeth')
|
|
|
|
>>> q.save()
|
|
|
|
|
|
|
|
# Create some children
|
|
|
|
>>> c = q.child_set.create(name='Charles')
|
|
|
|
>>> e = q.child_set.create(name='Edward')
|
|
|
|
|
|
|
|
# Set the best child
|
|
|
|
>>> q.bestchild = c
|
|
|
|
>>> q.save()
|
|
|
|
|
|
|
|
>>> q.delete()
|
|
|
|
|
2006-08-27 21:59:47 +08:00
|
|
|
"""}
|