Skip to content

Commit 7f89102

Browse files
committed
DOCSP-50489: EmbeddedModelArrayField support
1 parent 794ab48 commit 7f89102

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

source/includes/model-data/models.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,29 @@ class Meta:
7979

8080
def __str__(self):
8181
return self.title
82-
# end-embedded-field
82+
# end-embedded-field
83+
84+
# start-embedded-array-field
85+
from django.db import models
86+
from django_mongodb_backend.models import EmbeddedModel
87+
from django_mongodb_backend.fields import EmbeddedModelArrayField
88+
89+
class Actor(EmbeddedModel):
90+
first_name = models.CharField(max_length=100)
91+
last_name = models.CharField(max_length=100)
92+
role = models.CharField(max_length=100)
93+
94+
class Movie(models.Model):
95+
title = models.CharField(max_length=200)
96+
plot = models.TextField(blank=True)
97+
runtime = models.IntegerField(default=0)
98+
released = models.DateTimeField("release date", null=True, blank=True)
99+
cast = EmbeddedModelArrayField(Actor, null=True, blank=True)
100+
101+
class Meta:
102+
db_table = "movies"
103+
managed = False
104+
105+
def __str__(self):
106+
return self.title
107+
# end-embedded-array-field

source/model-data/models.txt

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ The following table describes supported BSON field types and their
168168
in this guide.
169169

170170
* - ``Object``
171-
- ``EmbeddedModelField``
171+
- ``EmbeddedModelField`` or ``EmbeddedModelArrayField``
172172
- | Stores embedded documents. To learn more about using this field
173173
with {+django-odm+}, see the :ref:`django-models-embedded` section in this guide.
174174

@@ -452,6 +452,36 @@ and modifies the ``Movie`` model to include the ``EmbeddedModelField``:
452452
To learn how to query data stored in an ``EmbeddedModelField``, see
453453
:ref:`django-query-embedded` in the Specify a Query guide.
454454

455+
.. _django-models-embedded-array:
456+
457+
Use an EmbeddedModelArrayField
458+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
459+
460+
You can use an ``EmbeddedModelArrayField`` to represent a MongoDB ``Object``
461+
that stores an array of document values. Each document in the array corresponds
462+
to a {+django-odm+} ``EmbeddedModelField`` value. To create an ``EmbeddedModelArrayField``,
463+
use the ``EmbeddedModelArrayField()`` class constructor and pass the following arguments:
464+
465+
- ``embedded_model``: Specifies the model stored in each array item.
466+
467+
- ``max_size``: *(Optional)* Specifies the maximum size of the array.
468+
469+
Example
470+
```````
471+
472+
This example adds an ``EmbeddedModelArrayField`` value to the model created in
473+
the :ref:`Define a Model example <django-models-define-ex>` in this
474+
guide. This ``cast`` field stores an array of embedded ``Actor`` models.
475+
The following code defines the ``Actor`` model and modifies the ``Movie`` model
476+
to include the ``EmbeddedModelArrayField``:
477+
478+
.. literalinclude:: /includes/model-data/models.py
479+
:start-after: start-embedded-array-field
480+
:end-before: end-embedded-array-field
481+
:language: python
482+
:copyable:
483+
:emphasize-lines: 5, 15
484+
455485
Additional Information
456486
----------------------
457487

0 commit comments

Comments
 (0)