xuchunlin
data



sqlite> select * from author;
id      name    age
1       jim     12
2       tom     11
sqlite> select * from book;
id      name    author_id
1       learn java      1
2       learn python    1
3       learn c++       2
models.py



# -*- coding: UTF-8 -*-
from __future__ import unicode_literals
from django.db import models

# Create your models here.

class Author(models.Model):
    name = models.CharField(verbose_name=\'姓名\', max_length=50)
    age = models.IntegerField(verbose_name=\'年龄\')

class Book(models.Model):
    name = models.CharField(verbose_name=\'书名\', max_length=100)
    author = models.ForeignKey(Author, verbose_name=\'作者\')
执行语句


>>> Author.objects.filter(book__name=\'learn java\')
[<Author: jim>]
>>> author = Author.objects.get(pk=1)
>>> author.book_set.all()
[<Book: learn java>, <Book: learn python>]
假如把类Book改成这样



class Book(models.Model):
    name = models.CharField(verbose_name=\'书名\', max_length=100)
    author = models.ForeignKey(Author, verbose_name=\'作者\', related_name=\'bs\', related_query_name=\'b\')
那么上面查询代码就应该写成这样


>>> Author.objects.filter(b__name=\'learn java\')
[<Author: jim>]
>>> author = Author.objects.get(pk=1)
>>> author.bs.all()
[<Book: learn java>, <Book: learn python>]
如果book表里有两个字段都外键关联author表,这时related_name就非常有用了。

 

分类:

技术点:

相关文章: