Skip to content

Instantly share code, notes, and snippets.

@taddeimania
Created July 9, 2015 18:51
Show Gist options
  • Save taddeimania/016bd629d48c9745dd8e to your computer and use it in GitHub Desktop.
Save taddeimania/016bd629d48c9745dd8e to your computer and use it in GitHub Desktop.
Many to Many description
class Genre(models.Model):
name = models.CharField(max_length=15)
class Movie(models.Model):
title = models.CharField(max_length=40)
genres = models.ManyToManyField(Genre)
>>> from stats.models import Movie, Genre
>>> family_genre = Genre.objects.create(name="Family")
>>> horror_genre = Genre.objects.create(name="Horror")
>>> comedy_genre = Genre.objects.create(name="Comedy")
>>> free_willy = Movie.objects.create(title="Free Willy")
>>> free_willy.genres
<django.db.models.fields.related.create_many_related_manager.<locals>.ManyRelatedManager object at 0x105d4be10>
>>> free_willy.genres.all()
[]
>>> free_willy.genres.add(family_genre)
>>> free_willy.genres.all()
[<Genre: Genre object>]
>>> free_willy.genres.all()[0].name
'Family'
>>> toy_story = Movie.objects.create(title="Toy Story")
>>> toy_story.genres.add(family_genre)
>>> toy_story.genres.add(comedy_genre)
>>> toy_story.genres.add(horror_genre)
>>> toy_story.genres.all()
[<Genre: Genre object>, <Genre: Genre object>, <Genre: Genre object>]
>>> toy_story.genres.all()[0].name
'Family'
>>> toy_story.genres.all()[1].name
'Horror'
>>> toy_story.genres.all()[2].name
'Comedy'
>>> toy_story.genres
<django.db.models.fields.related.create_many_related_manager.<locals>.ManyRelatedManager object at 0x105d6ff60>
>>> dir(toy_story.genres)
['__call__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_add_items', '_build_remove_filters', '_constructor_args', '_copy_to_model', '_db', '_get_queryset_methods', '_hints', '_inherited', '_insert', '_queryset_class', '_remove_items', '_set_creation_counter', '_update', 'add', 'aggregate', 'all', 'annotate', 'bulk_create', 'check', 'clear', 'complex_filter', 'contribute_to_class', 'core_filters', 'count', 'create', 'creation_counter', 'dates', 'datetimes', 'db', 'db_manager', 'deconstruct', 'defer', 'distinct', 'do_not_call_in_templates', 'earliest', 'exclude', 'exists', 'extra', 'filter', 'first', 'from_queryset', 'get', 'get_or_create', 'get_prefetch_queryset', 'get_queryset', 'in_bulk', 'instance', 'iterator', 'last', 'latest', 'model', 'name', 'none', 'only', 'order_by', 'prefetch_cache_name', 'prefetch_related', 'query_field_name', 'raw', 'related_val', 'remove', 'reverse', 'select_for_update', 'select_related', 'source_field', 'source_field_name', 'symmetrical', 'target_field', 'target_field_name', 'through', 'update', 'update_or_create', 'use_in_migrations', 'using', 'values', 'values_list']
>>> toy_story.genres.remove(horror_genre)
>>> toy_story.genres.all()
[<Genre: Genre object>, <Genre: Genre object>]
>>> toy_story.genres.all()[0].name\
... toy_story.genres.all()[0].name
File "<input>", line 2
toy_story.genres.all()[0].name
^
SyntaxError: invalid syntax
>>> toy_story.genres.all()[0].name
'Family'
>>> toy_story.genres.all()[1].name
'Comedy'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment