标签: 杂谈 | 分类:python_django |
一、一对多(外键)
例子:一个作者对应多本书,一本书只有一个作者
model代码:
[python] view plain copy
- class<wbr>Person(models.Model);<wbr><wbr></wbr></wbr></wbr>
- name<wbr>=<wbr>models.CharField(<span style="line-height:21px; word-break:normal; word-wrap:normal">'作者姓名'</span><span style="line-height:21px; word-break:normal; word-wrap:normal">,<wbr>max_length=</wbr></span><span style="line-height:21px; word-break:normal; word-wrap:normal">10</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr>
- age<wbr>=<wbr>models.IntegerField(<span style="line-height:21px; word-break:normal; word-wrap:normal">'作者年龄'</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr>
- <wbr><wbr></wbr></wbr>
- class<wbr>Book(models.Model):<wbr><wbr></wbr></wbr></wbr>
- person<wbr>=<wbr>models.ForeignKey(Person,<wbr>related_name=<span style="line-height:21px; word-break:normal; word-wrap:normal">'person_book'</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr></wbr>
- title<wbr>=<wbr>models.CharField(<span style="line-height:21px; word-break:normal; word-wrap:normal">'书籍名称'</span><span style="line-height:21px; word-break:normal; word-wrap:normal">,<wbr>max_length=</wbr></span><span style="line-height:21px; word-break:normal; word-wrap:normal">10</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr>
- pubtime<wbr>=<wbr>models.DateField(<span style="line-height:21px; word-break:normal; word-wrap:normal">'出版时间'</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr>
(一)获取对象方法:
1.从作者出发获取书籍
[python] view plain copy
- person<wbr>=<wbr>Person.objects.fiter(你的条件)<wbr><wbr></wbr></wbr></wbr></wbr>
- book<wbr>=<wbr>person.book_set.all()<wbr><wbr></wbr></wbr></wbr></wbr>
2.从书籍出发获取作者
[python] view plain copy
- p<wbr>=<wbr>book.person<wbr><wbr></wbr></wbr></wbr></wbr>
二、多对多
例子:一个作者对应多本书,一本书有多个作者
model代码:
[python] view plain copy
- class<wbr>Author(models.Model):<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr>first_name<wbr>=<wbr>models.CharField(max_length=<span style="line-height:21px; word-break:normal; word-wrap:normal">30</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></span></wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr>last_name<wbr>=<wbr>models.CharField(max_length=<span style="line-height:21px; word-break:normal; word-wrap:normal">40</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></span></wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr>email<wbr>=<wbr>models.EmailField()<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
- class<wbr>Book(models.Model):<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr>title<wbr>=<wbr>models.CharField(max_length=<span style="line-height:21px; word-break:normal; word-wrap:normal">200</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></span></wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr>authors<wbr>=<wbr>models.ManyToManyField(Author)<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
(一)获取对象方法:
1.从书籍出发获取作者
[python] view plain copy
- b<wbr>=<wbr>Book.objects.get(id=</wbr></wbr>50)<wbr><wbr></wbr></wbr>
- b.authors.all()<wbr><wbr></wbr></wbr>
- b.authors.filter(first_name='Adam')<wbr><wbr></wbr></wbr>
2.从作者出发获取书籍
[python] view plain copy
- a<wbr>=<wbr>Author.objects.get(id=</wbr></wbr>1)<wbr><wbr></wbr></wbr>
- a.book_set.all()<wbr><wbr></wbr></wbr>
(二)添加对象方法:
[python] view plain copy
- a<wbr>=<wbr>Author.objects.get(id=</wbr></wbr>1)<wbr><wbr></wbr></wbr>
- b<wbr>=<wbr>Book.objects.get(id=<span style="line-height:21px; word-break:normal; word-wrap:normal">50</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr>
- b.authors.add(a)<wbr><wbr></wbr></wbr>
(三)删除对象对象方法:
[python] view plain copy
- a<wbr>=<wbr>Author.objects.get(id=</wbr></wbr>1)<wbr><wbr></wbr></wbr>
- b<wbr>=<wbr>Book.objects.get(id=<span style="line-height:21px; word-break:normal; word-wrap:normal">50</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr>
- b.authors.remove(a)<wbr>或者<wbr>b.authors.filter(id=<span style="line-height:21px; word-break:normal; word-wrap:normal">1</span><span style="line-height:21px; word-break:normal; word-wrap:normal">).delete()</span></wbr></wbr>