举例讲解Django中数据模型访问外键值的方法
先设置一个关于书本(book)的数据模型:
fromdjango.dbimportmodels classPublisher(models.Model): name=models.CharField(max_length=30) address=models.CharField(max_length=50) city=models.CharField(max_length=60) state_province=models.CharField(max_length=30) country=models.CharField(max_length=50) website=models.URLField() def__unicode__(self): returnself.name classAuthor(models.Model): first_name=models.CharField(max_length=30) last_name=models.CharField(max_length=40) email=models.EmailField() def__unicode__(self): returnu'%s%s'%(self.first_name,self.last_name) classBook(models.Model): title=models.CharField(max_length=100) authors=models.ManyToManyField(Author) publisher=models.ForeignKey(Publisher) publication_date=models.DateField() def__unicode__(self): returnself.title
访问外键(ForeignKey)值
当你获取一个ForeignKey字段时,你会得到相关的数据模型对象。例如:
>>>b=Book.objects.get(id=50) >>>b.publisher <Publisher:ApressPublishing> >>>b.publisher.website u'http://www.apress.com/'
对于用``ForeignKey``来定义的关系来说,在关系的另一端也能反向的追溯回来,只不过由于不对称性的关系而稍有不同。通过一个``publisher``对象,直接获取books,用publisher.book_set.all(),如下:
>>>p=Publisher.objects.get(name='ApressPublishing') >>>p.book_set.all() [<Book:TheDjangoBook>,<Book:DiveIntoPython>,...]
实际上,book_set只是一个QuerySet,所以它可以像QuerySet一样,能实现数据过滤和分切,例如:
>>>p=Publisher.objects.get(name='ApressPublishing') >>>p.book_set.filter(name__icontains='django') [<Book:TheDjangoBook>,<Book:ProDjango>]
属性名称book_set是由模型名称的小写(如book)加_set组成的。
热门推荐
10 小红书平安祝福语简短
11 生日祝福语大全女孩简短
12 收生日红包祝福语 简短
13 领证幽默祝福语简短
14 法考面试祝福语简短
15 老哥出门祝福语简短语
16 送灯祝福语简短独特
17 幼儿狗年祝福语大全简短
18 好听的元旦简短祝福语