1import datetime
2import decimal
3import uuid
4
5from django.db import models
6from django.contrib.auth.models import User
7from django.db.models.query_utils import DeferredAttribute
8
9
10class TagManager(models.Manager):
11    def specially_filtered_tags(self):
12        return self.all()
13
14
15class Tag(models.Model):
16    tag_name = models.CharField()
17
18    objects = TagManager()
19
20    custom_objects = TagManager()
21
22
23class Category(models.Model):
24    category_name = models.CharField()
25
26
27class AttachedData(models.Model):
28    extra_data = models.TextField()
29
30
31class BusinessModel(models.Model):
32    attached_o2o = models.OneToOneField(AttachedData)
33
34    category_fk = models.ForeignKey(Category)
35    category_fk2 = models.ForeignKey('Category')
36    category_fk3 = models.ForeignKey(1)
37    category_fk4 = models.ForeignKey('models')
38    category_fk5 = models.ForeignKey()
39
40    integer_field = models.IntegerField()
41    big_integer_field = models.BigIntegerField()
42    positive_integer_field = models.PositiveIntegerField()
43    small_integer_field = models.SmallIntegerField()
44    char_field = models.CharField()
45    text_field = models.TextField()
46    email_field = models.EmailField()
47    ip_address_field = models.GenericIPAddressField()
48    url_field = models.URLField()
49    float_field = models.FloatField()
50    binary_field = models.BinaryField()
51    boolean_field = models.BooleanField()
52    decimal_field = models.DecimalField()
53    time_field = models.TimeField()
54    duration_field = models.DurationField()
55    date_field = models.DateField()
56    date_time_field = models.DateTimeField()
57    uuid_field = models.UUIDField()
58    tags_m2m = models.ManyToManyField(Tag)
59
60    unidentifiable = NOT_FOUND
61
62    #? models.IntegerField()
63    integer_field
64
65    def method(self):
66        return 42
67
68# -----------------
69# Model attribute inference
70# -----------------
71
72#? DeferredAttribute()
73BusinessModel.integer_field
74#? DeferredAttribute()
75BusinessModel.tags_m2m
76#? DeferredAttribute()
77BusinessModel.email_field
78
79model_instance = BusinessModel()
80
81#? int()
82model_instance.integer_field
83#? int()
84model_instance.big_integer_field
85#? int()
86model_instance.positive_integer_field
87#? int()
88model_instance.small_integer_field
89#? str()
90model_instance.char_field
91#? str()
92model_instance.text_field
93#? str()
94model_instance.email_field
95#? str()
96model_instance.ip_address_field
97#? str()
98model_instance.url_field
99#? float()
100model_instance.float_field
101#? bytes()
102model_instance.binary_field
103#? bool()
104model_instance.boolean_field
105#? decimal.Decimal()
106model_instance.decimal_field
107#? datetime.time()
108model_instance.time_field
109#? datetime.timedelta()
110model_instance.duration_field
111#? datetime.date()
112model_instance.date_field
113#? datetime.datetime()
114model_instance.date_time_field
115#? uuid.UUID()
116model_instance.uuid_field
117
118#! ['attached_o2o = models.OneToOneField(AttachedData)']
119model_instance.attached_o2o
120#! ['extra_data = models.TextField()']
121model_instance.attached_o2o.extra_data
122#? AttachedData()
123model_instance.attached_o2o
124#? str()
125model_instance.attached_o2o.extra_data
126
127#! ['category_fk = models.ForeignKey(Category)']
128model_instance.category_fk
129#! ['category_name = models.CharField()']
130model_instance.category_fk.category_name
131#? Category()
132model_instance.category_fk
133#? str()
134model_instance.category_fk.category_name
135#? Category()
136model_instance.category_fk2
137#? str()
138model_instance.category_fk2.category_name
139#?
140model_instance.category_fk3
141#?
142model_instance.category_fk4
143#?
144model_instance.category_fk5
145
146#? models.manager.RelatedManager()
147model_instance.tags_m2m
148#? Tag()
149model_instance.tags_m2m.get()
150#? ['add']
151model_instance.tags_m2m.add
152
153#?
154model_instance.unidentifiable
155#! ['unidentifiable = NOT_FOUND']
156model_instance.unidentifiable
157
158#? int()
159model_instance.method()
160#! ['def method']
161model_instance.method
162
163# -----------------
164# Queries
165# -----------------
166
167#? ['objects']
168model_instance.object
169#?
170model_instance.objects
171#?
172model_instance.objects.filter
173#? models.query.QuerySet.filter
174BusinessModel.objects.filter
175#? BusinessModel() None
176BusinessModel.objects.filter().first()
177#? str()
178BusinessModel.objects.get().char_field
179#? int()
180BusinessModel.objects.update(x='')
181#? BusinessModel()
182BusinessModel.objects.create()
183
184# -----------------
185# Custom object manager
186# -----------------
187
188#? TagManager()
189Tag.objects
190#? Tag() None
191Tag.objects.filter().first()
192
193#? TagManager()
194Tag.custom_objects
195#? Tag() None
196Tag.custom_objects.filter().first()
197
198# -----------------
199# Inheritance
200# -----------------
201
202class Inherited(BusinessModel):
203    text_field = models.IntegerField()
204    new_field = models.FloatField()
205
206inherited = Inherited()
207#? int()
208inherited.text_field
209#? str()
210inherited.char_field
211#? float()
212inherited.new_field
213
214#?
215Inherited.category_fk2.category_name
216#? str()
217inherited.category_fk2.category_name
218#? str()
219Inherited.objects.get().char_field
220#? int()
221Inherited.objects.get().text_field
222#? float()
223Inherited.objects.get().new_field
224
225# -----------------
226# Model methods
227# -----------------
228
229#? ['from_db']
230Inherited.from_db
231#? ['validate_unique']
232Inherited.validate_uniqu
233#? ['validate_unique']
234Inherited().validate_unique
235
236# -----------------
237# Django Auth
238# -----------------
239
240#? str()
241User().email
242#? str()
243User.objects.get().email
244
245# -----------------
246# values & values_list (dave is too lazy to implement it)
247# -----------------
248
249#?
250BusinessModel.objects.values_list('char_field')[0]
251#? dict()
252BusinessModel.objects.values('char_field')[0]
253#?
254BusinessModel.objects.values('char_field')[0]['char_field']
255
256# -----------------
257# Completion
258# -----------------
259
260#? 19 ['text_field=']
261Inherited(text_fiel)
262#? 18 ['new_field=']
263Inherited(new_fiel)
264#? 19 ['char_field=']
265Inherited(char_fiel)
266#? 19 ['email_field=']
267Inherited(email_fie)
268#? 19 []
269Inherited(unidentif)
270#? 21 ['category_fk=', 'category_fk2=', 'category_fk3=', 'category_fk4=', 'category_fk5=']
271Inherited(category_fk)
272#? 21 ['attached_o2o=']
273Inherited(attached_o2)
274#? 18 ['tags_m2m=']
275Inherited(tags_m2m)
276
277#? 32 ['tags_m2m=']
278Inherited.objects.create(tags_m2)
279#? 32 ['tags_m2m=']
280Inherited.objects.filter(tags_m2)
281#? 35 ['char_field=']
282Inherited.objects.exclude(char_fiel)
283#? 34 ['char_field=']
284Inherited.objects.update(char_fiel)
285#? 32 ['email_field=']
286Inherited.objects.get(email_fiel)
287#? 44 ['category_fk2=']
288Inherited.objects.get_or_create(category_fk2)
289#? 44 ['uuid_field=']
290Inherited.objects.update_or_create(uuid_fiel)
291#? 48 ['char_field=']
292Inherited.objects.exclude(pk=3).filter(char_fiel)
293