Django-中介模型
2018-03-09 10:27
337 查看
有多对多字段的时候自己创建的第三章表就是中介模型
class Article(models.Model): ''' 文章表 ''' title = models.CharField(max_length=64,verbose_name="文章标题") summary = models.CharField(max_length=244, verbose_name="文章概要") create_time = models.DateTimeField(verbose_name="创建时间",auto_now_add=True) update_time = models.DateTimeField(verbose_name="修改时间",auto_now=True) up_count = models.IntegerField(verbose_name="点赞数",default=0) down_count = models.IntegerField(verbose_name="点灭数",default=0) comment_count = models.IntegerField(verbose_name="评论数",default=0) read_count = models.IntegerField(verbose_name="阅读数",default=0) user = models.ForeignKey(to="UserInfo",verbose_name="所属作者",null=True,blank=True) classify = models.ForeignKey(to="Classfication",verbose_name="所属类别",null=True,blank=True) tags = models.ManyToManyField(to="Tag",through="Article2tag",through_fields=('article', 'tag'),verbose_name="所属标签") site_article_category = models.ForeignKey(to="SiteArticleCategory",verbose_name="所属文章分类",null=True,blank=True) class Meta: verbose_name_plural = "文章表" def __str__(self): return self.title class Tag(models.Model): '''标签表''' name = models.CharField(max_length=32,verbose_name="标签名") blog = models.ForeignKey(to="Blog",verbose_name="所属博客") class Meta: verbose_name_plural = "标签表" def __str__(self): return self.name class Article2tag(models.Model): article = models.ForeignKey(verbose_name="文章",to="Article") tag = models.ForeignKey(verbose_name="标签",to="Tag") class Meta: verbose_name="文章和标签关系表" '''联合唯一''' unique_together = [ ("article","tag") ] def __str__(self): return self.article.title + " "+self.tag.name 像是这样自己创建的第三张表就属于是中介模型。一般就Django会给我们自动创建第三张表, 人家自己创建的只是有关系字段,不能在增加其他的字段了, 如果根据需求添加其他字段,不需要ManytoMany自己创建第三张表就自己设置第三张表 这就需要我们自己去创建第三张表。 当然我现在设计的Article2tag这个第三张表就可以在里面添加其他你需要的字段。
如果用了中介模型了,就不能在用add,remove了 为什么不能这样做? 这是因为你不能只创建 article和 tag之间的关联关系,你还要指定 Membership模型中所需要的所有信息;而简单的add、create 和赋值语句是做不到这一点的。所以它们不能在使用中介模型的多对多关系中使用。此时,唯一的办法就是创建中介模型的实例。 remove()方法被禁用也是出于同样的原因。但是clear() 方法却是可用的。它可以清空某个实例所有的多对多关系:
相关文章推荐
- Django-model进阶(中介模型,查询优化,extra,整体插入)
- Django QuerySet和中介模型
- Django模型操作常用方法总结
- Django ORM模型:想说爱你不容易
- 多个django模型修改页面在一个页面上
- Django文档翻译:模型参考(Model Reference)
- 通过数据库对Django进行删除字段和删除模型的操作
- Django 模型(数据库)操作的要点
- Django模型中的OneToOneField和ForeignKey有什么区别?
- 三【用django2.0来开发】后台会员管理(二) ModelAdmin 模型管理的使用方法
- Django模型的Field Types总结
- Django-模型
- django学习——model.py中重写user模型
- django的Model 模型中常用的字段类型
- models.py---Django中的数据库模型
- Django模型
- Django为何用Python代码定义数据模型
- django修改模型后更新数据库
- Django入门-5:模型的基本使用5-QuerySet API讲解
- Django添加模型无法数据迁移解决方法