diff --git a/docs/topics/db/models.txt b/docs/topics/db/models.txt
index 4467f22..da70a0b 100644
a
|
b
|
determine a few things:
|
115 | 115 | |
116 | 116 | * The database column type (e.g. ``INTEGER``, ``VARCHAR``). |
117 | 117 | |
118 | | * The widget to use in Django's admin interface, if you care to use it |
119 | | (e.g. ``<input type="text">``, ``<select>``). |
| 118 | * The :doc:`widget </ref/forms/widgets>` to use in Django's admin interface, |
| 119 | if you care to use it (e.g. ``<input type="text">``, ``<select>``). |
120 | 120 | |
121 | 121 | * The minimal validation requirements, used in Django's admin and in |
122 | 122 | automatically-generated forms. |
… |
… |
disabled for many-to-many relationships that use an intermediate model.
|
492 | 492 | The only way to create this type of relationship is to create instances of the |
493 | 493 | intermediate model. |
494 | 494 | |
495 | | The ``remove`` method is disabled for similar reasons. However, the |
496 | | ``clear()`` method can be used to remove all many-to-many relationships |
497 | | for an instance:: |
| 495 | The :meth:`~django.db.models.fields.related.RelatedManager.remove` method is |
| 496 | disabled for similar reasons. However, the |
| 497 | :meth:`~django.db.models.fields.related.RelatedManager.clear` method can be |
| 498 | used to remove all many-to-many relationships for an instance:: |
498 | 499 | |
499 | 500 | # Beatles have broken up |
500 | 501 | >>> beatles.members.clear() |
… |
… |
right).
|
972 | 973 | So a child model does not have access to its parent's :ref:`Meta |
973 | 974 | <meta-options>` class. However, there are a few limited cases where the child |
974 | 975 | inherits behavior from the parent: if the child does not specify an |
975 | | :attr:`django.db.models.Options.ordering` attribute or a |
976 | | :attr:`django.db.models.Options.get_latest_by` attribute, it will inherit |
| 976 | :attr:`~django.db.models.Options.ordering` attribute or a |
| 977 | :attr:`~django.db.models.Options.get_latest_by` attribute, it will inherit |
977 | 978 | these from its parent. |
978 | 979 | |
979 | 980 | If the parent has an ordering and you don't want the child to have any natural |
… |
… |
Inheritance and reverse relations
|
989 | 990 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
990 | 991 | |
991 | 992 | Because multi-table inheritance uses an implicit |
992 | | :class:`~django.db.models.fields.OneToOneField` to link the child and |
| 993 | :class:`~django.db.models.OneToOneField` to link the child and |
993 | 994 | the parent, it's possible to move from the parent down to the child, |
994 | 995 | as in the above example. However, this uses up the name that is the |
995 | 996 | default :attr:`~django.db.models.ForeignKey.related_name` value for |
996 | | :class:`django.db.models.fields.ForeignKey` and |
997 | | :class:`django.db.models.fields.ManyToManyField` relations. If you |
| 997 | :class:`~django.db.models.ForeignKey` and |
| 998 | :class:`~django.db.models.ManyToManyField` relations. If you |
998 | 999 | are putting those types of relations on a subclass of another model, |
999 | 1000 | you **must** specify the |
1000 | 1001 | :attr:`~django.db.models.ForeignKey.related_name` attribute on each |
… |
… |
such field. If you forget, Django will raise an error when you run
|
1002 | 1003 | :djadmin:`validate` or :djadmin:`syncdb`. |
1003 | 1004 | |
1004 | 1005 | For example, using the above ``Place`` class again, let's create another |
1005 | | subclass with a :class:`~django.db.models.fields.ManyToManyField`:: |
| 1006 | subclass with a :class:`~django.db.models.ManyToManyField`:: |
1006 | 1007 | |
1007 | 1008 | class Supplier(Place): |
1008 | 1009 | # Must specify related_name on all relations. |
… |
… |
Specifying the parent link field
|
1013 | 1014 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
1014 | 1015 | |
1015 | 1016 | As mentioned, Django will automatically create a |
1016 | | :class:`~django.db.models.fields.OneToOneField` linking your child |
| 1017 | :class:`~django.db.models.OneToOneField` linking your child |
1017 | 1018 | class back any non-abstract parent models. If you want to control the |
1018 | 1019 | name of the attribute linking back to the parent, you can create your |
1019 | | own :class:`~django.db.models.fields.OneToOneField` and set |
1020 | | :attr:`parent_link=True <django.db.models.fields.OneToOneField.parent_link>` |
| 1020 | own :class:`~django.db.models.OneToOneField` and set |
| 1021 | :attr:`parent_link=True <django.db.models.OneToOneField.parent_link>` |
1021 | 1022 | to indicate that your field is the link back to the parent class. |
1022 | 1023 | |
1023 | 1024 | .. _proxy-models: |
… |
… |
Proxy models are declared like normal models. You tell Django that it's a
|
1045 | 1046 | proxy model by setting the :attr:`~django.db.models.Options.proxy` attribute of |
1046 | 1047 | the ``Meta`` class to ``True``. |
1047 | 1048 | |
1048 | | For example, suppose you want to add a method to the standard ``User`` model |
1049 | | that will be used in your templates. You can do it like this:: |
| 1049 | For example, suppose you want to add a method to the standard |
| 1050 | :class:`~django.contrib.auth.models.User` model that will be used in your |
| 1051 | templates. You can do it like this:: |
1050 | 1052 | |
1051 | 1053 | from django.contrib.auth.models import User |
1052 | 1054 | |
… |
… |
that will be used in your templates. You can do it like this::
|
1058 | 1060 | ... |
1059 | 1061 | |
1060 | 1062 | The ``MyUser`` class operates on the same database table as its parent |
1061 | | ``User`` class. In particular, any new instances of ``User`` will also be |
1062 | | accessible through ``MyUser``, and vice-versa:: |
| 1063 | :class:`~django.contrib.auth.models.User` class. In particular, any new |
| 1064 | instances of :class:`~django.contrib.auth.models.User` will also be accessible |
| 1065 | through ``MyUser``, and vice-versa:: |
1063 | 1066 | |
1064 | 1067 | >>> u = User.objects.create(username="foobar") |
1065 | 1068 | >>> MyUser.objects.get(username="foobar") |
1066 | 1069 | <MyUser: foobar> |
1067 | 1070 | |
1068 | 1071 | You could also use a proxy model to define a different default ordering on a |
1069 | | model. The standard ``User`` model has no ordering defined on it |
1070 | | (intentionally; sorting is expensive and we don't want to do it all the time |
1071 | | when we fetch users). You might want to regularly order by the ``username`` |
1072 | | attribute when you use the proxy. This is easy:: |
| 1072 | model. The standard :class:`~django.contrib.auth.models.User` model has no |
| 1073 | ordering defined on it (intentionally; sorting is expensive and we don't want |
| 1074 | to do it all the time when we fetch users). You might want to regularly order |
| 1075 | by the ``username`` attribute when you use the proxy. This is easy:: |
1073 | 1076 | |
1074 | 1077 | class OrderedUser(User): |
1075 | 1078 | class Meta: |
1076 | 1079 | ordering = ["username"] |
1077 | 1080 | proxy = True |
1078 | 1081 | |
1079 | | Now normal ``User`` queries will be unordered and ``OrderedUser`` queries will |
1080 | | be ordered by ``username``. |
| 1082 | Now normal :class:`~django.contrib.auth.models.User` queries will be unordered |
| 1083 | and ``OrderedUser`` queries will be ordered by ``username``. |
1081 | 1084 | |
1082 | 1085 | QuerySets still return the model that was requested |
1083 | 1086 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
1084 | 1087 | |
1085 | 1088 | There is no way to have Django return, say, a ``MyUser`` object whenever you |
1086 | | query for ``User`` objects. A queryset for ``User`` objects will return those |
1087 | | types of objects. The whole point of proxy objects is that code relying on the |
1088 | | original ``User`` will use those and your own code can use the extensions you |
1089 | | included (that no other code is relying on anyway). It is not a way to replace |
1090 | | the ``User`` (or any other) model everywhere with something of your own |
1091 | | creation. |
| 1089 | query for :class:`~django.contrib.auth.models.User` objects. A queryset for |
| 1090 | ``User`` objects will return those types of objects. The whole point of proxy |
| 1091 | objects is that code relying on the original ``User`` will use those and your |
| 1092 | own code can use the extensions you included (that no other code is relying on |
| 1093 | anyway). It is not a way to replace the ``User`` (or any other) model |
| 1094 | everywhere with something of your own creation. |
1092 | 1095 | |
1093 | 1096 | Base class restrictions |
1094 | 1097 | ~~~~~~~~~~~~~~~~~~~~~~~ |
… |
… |
column name, you can have the same column name appearing in both a child and
|
1227 | 1230 | an ancestor model for multi-table inheritance (they are columns in two |
1228 | 1231 | different database tables). |
1229 | 1232 | |
1230 | | Django will raise a ``FieldError`` exception if you override any model field |
1231 | | in any ancestor model. |
| 1233 | Django will raise a :exc:`~django.core.exceptions.FieldError` if you override |
| 1234 | any model field in any ancestor model. |