You are on page 1of 2

django_db_cheat.

txt
Page 1 of 2 Aug/2008
1 #Model of question:
2 class Blog(models.Model):
3 name = models.CharField(max_length=100)
4 tagline = models.TextField()
5 bestEntry = ForeignKey("mutually_referential.Entry")
6 # two way relations usually illegal unless specified as referential
7 # myId = models.AutoField(primary_key=True)
8 # by default the primary key is called 'id' - but overridable
9 # 'blog.pk' to will refer to the primary key regardless of what its called
10
11 class Author(models.Model):
12 name = models.CharField(max_length=50)
13 email = models.EmailField()
14
15 class Entry(models.Model):
16 blog = models.ForeignKey(Blog)
17 # automagically in any Blog instance b, there is now a set called b.entry_set
18 # blog = models.ForeignKey(Blog, related_name='custom_name')
19 # (this overrides default name of blog.entry_set with blog.custom_name)
20 headline = models.CharField(max_length=255)
21 body_text = models.TextField()
22 pub_date = models.DateTimeField()
23 authors = models.ManyToManyField(Author)
24 class Meta:
25 ordering = ('-pub_date', 'headline')
26 def articles_from_same_day(self):
27 return Entry.objects.filter(pub_date=self.pub_date).exclude(id=self.id)
28 # a.articles_from_same_day() returns a resultset
29
30 class EntryDetail(models.Model):
31 entry = models.OneToOneField(Entry)
32 details = models.TextField()
33
34 #Inserting
35 b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
36 b.save()
37 bb = Blog(id=3, name='Not Cheddar', tagline='Anything but cheese.')
38 bb.save() # Overrides the previous blog with ID=3!
39
40 #Manager
41 Entry.objects.get(id=2) # gets id=2
42 e = Entry.objects.select_related().get(id=2)
43 print e.blog # Doesn't hit the database twice; uses cached version.
44
45 #Filter and Exclusion - it is a lazy operation, not done until iterated/read
46 Entry.objects.filter(pub_date__year=2006)
47 Entry.objects.filter(
48 headline__startswith='What').exclude(
49 pub_date__gte=datetime.now()).filter(
50 pub_date__gte=datetime(2005, 1, 1))
51 Entry.objects.filter(blog=b) # Query using object instance
52 Entry.objects.filter(blog=b.id) # Query using id from instance
53 Entry.objects.filter(blog=5) # Query using id directly
54
55 #Sorting
56 Entry.objects.order_by('pub_date', '-headline')
57
58 # Deleting
59 e.delete() #If there are dependencies, they will be deleted too
60 Entry.objects.filter(pub_date__year=2005).delete()
61 # warning - when deleting a resultset, you might delete many entries
62
63 # Updating
64 e.headline = 'Everything is the same'
65 e.save()

- 1 -
django_db_cheat.txt
Page 2 of 2 Aug/2008
66 Entry.objects.filter(pub_date__year=2007).update(headline='Everything is the same')
67 Entry.objects.all().update(blog=b)
68 # need to save if you use bulk
69 for item in Entry.objects.all():
70 item.save()
71
72 # Many-to-One - via ForeignKey
73 b = Blog.objects.get(id=1)
74 b.entry_set.all() # Returns all Entry objects related to Blog.
75 b.entry_set.filter(headline__contains='Lennon')
76 b.entry_set.count()
77 e = Entry.objects.get(id=234)
78 b.entry_set.add(e) # Associates Entry e with Blog b.
79 e = b.entry_set.create(headline='Hello',body_text='Hi',pub_date=datetime.date(2005, 1, 1))
80 b.entry_set.remove(e) # Disassociates Entry e from Blog b.
81 b.entry_set.clear()
82 b.entry_set = [e1, e2] # You can't set to one element need [e1,]
83
84 # One-to-One - via OneToOneField
85 ed = EntryDetail.objects.get(id=2)
86 ed.entry # Returns the related Entry object.
87 e = Entry.objects.get(id=2)
88 e.entrydetail
89 e.entrydetail = ed
90
91 # Many-to-Many - via ManyToManyField
92 e = Entry.objects.get(id=3)
93 e.authors.all() # Returns all Author objects for this Entry.
94 e.authors.filter(name__contains='John')
95 a = Author.objects.get(id=5)
96 a.entry_set.all() # Returns all Entry objects for this Author.
97 a.entry_set.filter(body_text__contains='John')
98 a.entry_set.create(....) #just like normal create
99
100 # Misc functions
101 Author.objects.get_or_create(name='David', defaults={'email': 'generic@email.com'})
102
103 # Returning a url to go to object:
104 # suppose your urlconf had
105 # (r'/archive/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/$', archive_view)
106 from django.db.models import permalink
107 def get_absolute_url(self):
108 return ('archive_view', (), {
109 'year': self.created.year,
110 'month': self.created.month,
111 'day': self.created.day})
112 get_absolute_url = permalink(get_absolute_url)
113
114 # Doing custom sql:
115 def my_custom_sql(self):
116 from django.db import connection
117 cursor = connection.cursor()
118 cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
119 row = cursor.fetchone()
120 return row
121
122 # Field Type Reference
123 AutoField, BooleanField, CharField, CommaSeparatedIntegerField, DateField, DateTimeField,
124 DecimalField, EmailField, FileField, FilePathField, FloatField, ImageField, IntegerField,
125 IPAddressField, NullBooleanField, PhoneNumberField, PositiveIntegerField,
126 PositiveSmallIntegerField, SlugField, SmallIntegerField, TextField, TimeField, URLField,
127 USStateField, XMLField
128
129 # Model Methods
130 __unicode__, get_absolute_url

- 2 -

You might also like