Django 多对多的保存

Django 多对多的保存

Models 模型如下:

Python
from <span class="wp_keywordlink_affiliate"><a href="https://www.168seo.cn/tag/django" title="View all posts in django" target="_blank">django</a></span>.db import models # Create your models here. class Category(models.Model): cate_name = models.CharField(max_length=30) cate_desc = models.CharField(max_length=100) cate_slug = models.CharField(max_length=30) def __str__(self): return self.cate_name class Meta: db_table="movie_cate" class Tag(models.Model): tag_name = models.CharField(max_length=30) tag_desc = models.CharField(max_length=100) tag_slug = models.CharField(max_length=30) def __str__(self): return self.tag_name class Meta: db_table="movie_tag" class Director(models.Model): name = models.CharField(max_length=30) desc = models.TextField(blank=True) def __str__(self): return self.name class Meta: db_table="director" class Actor(models.Model): name = models.CharField(max_length=30) desc = models.TextField(blank=True) def __str__(self): return self.name class Meta: db_table="actor" class Dl_links(models.Model): links = models.CharField(max_length=200) links_name = models.CharField(max_length=30) def __str__(self): return self.links_name class Meta: db_table="dl_links" class Movie(models.Model): title = models.CharField(max_length=50) category = models.ForeignKey(Category) directors = models.ManyToManyField(Director) actors = models.ManyToManyField(Actor) poster = models.CharField(max_length=100) tags = models.ManyToManyField(Tag) other_name = models.CharField(max_length=100,default='') dl_links = models.ForeignKey(Dl_links,null=True,default='') score = models.IntegerField() def __str__(self): return self.title class Meta: db_table="movie"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from django . db import models
 
# Create your models here.
 
class Category ( models . Model ) :
     cate_name = models . CharField ( max_length = 30 )
     cate_desc = models . CharField ( max_length = 100 )
     cate_slug = models . CharField ( max_length = 30 )
 
     def __str__ ( self ) :
         return self . cate_name
 
     class Meta :
         db_table = "movie_cate"
 
 
class Tag ( models . Model ) :
     tag_name = models . CharField ( max_length = 30 )
     tag_desc = models . CharField ( max_length = 100 )
     tag_slug = models . CharField ( max_length = 30 )
 
     def __str__ ( self ) :
         return self . tag_name
 
     class Meta :
         db_table = "movie_tag"
 
class Director ( models . Model ) :
     name = models . CharField ( max_length = 30 )
     desc = models . TextField ( blank = True )
 
     def __str__ ( self ) :
         return self . name
 
     class Meta :
         db_table = "director"
 
class Actor ( models . Model ) :
     name = models . CharField ( max_length = 30 )
     desc = models . TextField ( blank = True )
 
     def __str__ ( self ) :
         return self . name
 
     class Meta :
         db_table = "actor"
 
class Dl_links ( models . Model ) :
     links = models . CharField ( max_length = 200 )
     links_name = models . CharField ( max_length = 30 )
 
     def __str__ ( self ) :
         return self . links_name
 
     class Meta :
         db_table = "dl_links"
 
class Movie ( models . Model ) :
     title = models . CharField ( max_length = 50 )
     category = models . ForeignKey ( Category )
     directors = models . ManyToManyField ( Director )
     actors = models . ManyToManyField ( Actor )
     poster = models . CharField ( max_length = 100 )
     tags = models . ManyToManyField ( Tag )
     other_name = models . CharField ( max_length = 100 , default = '' )
     dl_links = models . ForeignKey ( Dl_links , null = True , default = '' )
     score = models . IntegerField ( )
 
 
     def __str__ ( self ) :
         return self . title
 
     class Meta :
         db_table = "movie"
 

多对多的保存

首先查询出 多对多需要用的
Python
""" category = models.ForeignKey(Category) directors = models.ManyToManyField(Director) actors = models.ManyToManyField(Actor) tags = models.ManyToManyField(Tag) dl_links = models.ForeignKey(Dl_links,null=True,default='') """ In [1]: from movie.models import * In [2]: c1 = Category.objects.get(pk=1) In [3]: c1 Out[3]: <Category: 分类0> In [4]: d1 = Director.objects.get(pk=1) In [5]: d1 Out[5]: <Director: 0导演> In [6]: d2 = Director.objects.get(pk=2) In [7]: t1 = Tag.objects.get(pk=1) In [8]: t2 = Tag.objects.get(pk=2) In [9]: dl1 = Dl_links.objects.get(pk=1) # 保存多对一的类型 In [19]: mv= Movie.objects.create(title='海王',category=c1,poster="ddd",other_na ...: me='d',dl_links=dl1,score=10) # 保存与之关联的多对多 In [21]: mv.directors.add(d1,d2) In [22]: mv.tags.add(t1,t2) In [23]: mv.actors.add(a1,a2) In [24]: mv Out[24]: <Movie: 海王>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"""
    category = models.ForeignKey(Category)
    directors = models.ManyToManyField(Director)
    actors = models.ManyToManyField(Actor)
    tags = models.ManyToManyField(Tag)
    dl_links = models.ForeignKey(Dl_links,null=True,default='')
"""
 
In [ 1 ] : from movie . models import *
 
In [ 2 ] : c1 = Category . objects . get ( pk = 1 )
 
In [ 3 ] : c1
Out [ 3 ] : < Category : 分类 0 >
 
In [ 4 ] : d1 = Director . objects . get ( pk = 1 )
 
In [ 5 ] : d1
Out [ 5 ] : < Director : 0导演 >
 
In [ 6 ] : d2 = Director . objects . get ( pk = 2 )
 
In [ 7 ] : t1 = Tag . objects . get ( pk = 1 )
 
In [ 8 ] : t2 = Tag . objects . get ( pk = 2 )
 
In [ 9 ] : dl1 = Dl_links . objects . get ( pk = 1 )
 
# 保存多对一的类型
In [ 19 ] : mv = Movie . objects . create ( title = '海王' , category = c1 , poster = "ddd" , other _na
     . . . : me = 'd' , dl_links = dl1 , score = 10 )
# 保存与之关联的多对多
In [ 21 ] : mv . directors . add ( d1 , d2 )
 
In [ 22 ] : mv . tags . add ( t1 , t2 )
 
In [ 23 ] : mv . actors . add ( a1 , a2 )
In [ 24 ] : mv
Out [ 24 ] : < Movie : 海王 >     
 



  • zeropython 微信公众号 5868037 QQ号 5868037@qq.com QQ邮箱
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值