Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions source/includes/model-data/indexes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# start-models
from django.db import models
from django.db.models import Q, F
from django_mongodb_backend.models import EmbeddedModel
from django_mongodb_backend.fields import EmbeddedModelField, ArrayField

class Nutrition(EmbeddedModel):
calories = models.IntegerField(default=0)
carb_grams = models.IntegerField(default=0)
protein_grams = models.IntegerField(default=0)

class Recipe(models.Model):
title = models.CharField(max_length=200)
cuisine = models.CharField(max_length=200)
cook_time = models.IntegerField(default=0)
allergens = ArrayField(models.CharField(max_length=100), null=True, blank=True)
nutrition = EmbeddedModelField(Nutrition, null=True, blank=True)

class Meta:
db_table = "recipes"

def __str__(self):
return self.title
# end-models

# start-single-field-meta
class Meta:
db_table = "recipes"
indexes = [
models.Index(fields=["title"], name="title_idx"),
]
# end-single-field-meta

# start-single-field-option
class Recipe(models.Model):
title = models.CharField(max_length=200, db_index=True)
# end-single-field-option

# start-compound
class Meta:
db_table = "recipes"
indexes = [
models.Index(fields=["title", "cook_time"]),
]
# end-compound

# start-multikey
class Meta:
db_table = "recipes"
indexes = [
models.Index(fields=["allergens"], name="allergy_idx"),
]
# end-multikey

# start-embedded
class Meta:
db_table = "recipes"
indexes = [
models.Index(fields=["nutrition"]),
]
# end-embedded

# start-partial
class Meta:
db_table = "recipes"
indexes = [
models.Index(fields=["cuisine"],
condition=Q(cook_time__lt=30),
name="fast_cuisine_idx"),
]
# end-partial

# start-unique-single
cuisine = models.CharField(max_length=200, unique=True)
# end-unique-single

# start-unique-compound
class Meta:
db_table = "recipes"
constraints = [
models.UniqueConstraint(fields=["title", "cuisine"],
name="unique_regional_meal"),
]
# end-unique-compound
4 changes: 1 addition & 3 deletions source/model-data.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,8 @@ Model Your Data
:titlesonly:
:maxdepth: 1

Create Indexes </model-data/indexes>
Create Models </model-data/models>

.. TODO:
Create Indexes </model-data/models>

In this section, you can learn how to create and customize
your Django models for use with MongoDB.
Expand Down
Loading
Loading