zoukankan      html  css  js  c++  java
  • Django-中介模型

    有多对多字段的时候自己创建的第三章表就是中介模型

    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() 方法却是可用的。它可以清空某个实例所有的多对多关系:
  • 相关阅读:
    各种web页面中的绘图技术对比
    32位和64位操作系统
    mysql新建用户本地无法登录
    ruby libmysqlclient.18.dylib
    jenkins创建git任务连接时遇到的问题
    mybatis 打印日志log4j.properties
    使用shell统计出出现次数排名top10的网址(在博客园中没找到,特转一下)
    ActiveMQ和Tomcat的整合应用(转)
    java 哪些情况下会使对象锁释放
    Web容器与Servlet
  • 原文地址:https://www.cnblogs.com/52-qq/p/8532472.html
Copyright © 2011-2022 走看看