Transferred from: http://my.oschina.net/u/993130/blog/209460
1. Multi-table Connection query: When I know this, I feel that Django is too nx. class A (models. Model):
Name = models. Charfield (U ' name ')
Class B (models. Model):
AA = models. ForeignKey (A)
# AA = models. ForeignKey (A, Primarykey=true) #注: In a real database table structure, the name of the corresponding field is added by Django with a _id suffix, which becomes aa_id B.objects.filter (aa__name__ contains= ' Searchtitle ')
1.5 I call it reverse query, then insert record 1.5, when I know the moment I feel that Django too wife NX.
Class A (models. Model):
Name = models. Charfield (U ' name ')
Class B (models. Model):
AA = models. ForeignKey (a,related_name= "FAN")
BB = models. Charfield (U ' name ')
Check A:a.objects.filter (fan__bb= ' XXXX '), are aware of the role of Related_name, A.fan.all () is a group of a as a foreign key B instance, can be used before such a usage is to query out all (B.aa=a and b.bb=xxxx An instance of a, and can also be found through the various relationships, true red shock ...
2. When the condition is selected Queryset, filter indicates that =,exclude represents! =.
Queryset.distinct () to repeat
__exact exactly equals like ' AAA '
__iexact precision equals ignoring case ilike ' AAA '
__contains contains like '%aaa% '
__icontains includes ignoring case ilike '%aaa% ', but for SQLite, the effect of contains is equivalent to Icontains.
__GT Greater than
__gte greater than or equal to
__lt less than
__lte less than or equal to
__in exists in a list range
__startswith to ... Beginning
__istartswith to ... Start ignoring case
__endswith to ... End
__iendswith to ... End, ignoring case
__range in ... Within range
__year Year of Date field
__month Month of Date field
Day of the __day date field
__isnull=true/false
Example:
>> q1 = Entry.objects.filter (headline__startswith= "what")
>> q2 = q1.exclude (Pub_date__gte=datetime.date.today ())
>> q3 = Q1.filter (Pub_date__gte=datetime.date.today ())
>>> q = Q.filter (Pub_date__lte=datetime.date.today ())
>>> q = q.exclude (body_text__icontains= "food")
That is, Q1.filter (Pub_date__gte=datetime.date.today ()) is expressed as time >=now,q1.exclude (Pub_date__gte=datetime.date.today ()) expressed as <=now
2013/12/12 Supplement:
"Get the distinct value of a field in the Django models." is select DISTINCT XXX from table_name ... Such a feature. Using values generates Valuesqueryset (a list of n dict), guessing that big data has no additional performance impact, after all, the Queryset series is queried when it is used.
Xxxx.objects.values ("Field_name"). Distinct ()
#或者
Xxxx.objects.distinct (). VALUES ("Field_name")
These two sentences generate the same SQL statement, the original address: http://blog.csdn.net/tsbob/article/details/1340293.
About caching:
The queryset is cached, a = A.objects.all (), print [I for I in a]. The first execution of the print queries the database, and the results are saved in the Queryset built-in cache, which is taken from the buffer when the print is executed.
A lot of times you will have to judge if Queryset is empty, you can 1. If Queryset:pass 2.if queryset.count>0:pass 3.if queryset.exists ():p. Three ways to improve performance in turn.
When the queryset is very large, the cache becomes a problem. At this point can be queryset.iterator (), the use of iterators is not much to say, according to the specific needs of the situation.