m2m數據操作
model定義
class Article(models.Model): userid = models.ForeignKey(User, null=True, blank=True, verbose_name='登陸人',on_delete=models.CASCADE) avatar = models.ImageField(upload_to='article/%Y%m%d/', null=True,blank=True) category = models.ManyToManyField(Category, null=True,blank=True,verbose_name="分類" )
article數據

catagory數據

def m2morm(): # uid = [{'id':obj.id,'name':obj.name,'urlid':obj.urlid,'parent_id':obj.parent_code } for obj in Category.objects.filter(level='1')] c1 = Category.objects.get(id=15) c2 = Category.objects.get(id=20) c3 = Category.objects.get(id=32) a1 = Article.objects.get(id=126) a2 = Article.objects.get(id=127) a3 = Article.objects.get(id=128) # 一。1、article 添加catagroy: 重復添加沒問題 # a1.category.add(c2) # a2.category.add(c1,c2,c3) list_cata = [c1, c3] # a1.category.set(list_cata) #article.set(list)會把原有的catagory關系刪除,替換成set中的新的list a2.category.set(list_cata) # c1.article_set.clear() # a1.category.clear() # 一。2、catagory 也可以添加article,或刪除文章: # c2.article_set.add(a3,a1) # c2.article_set.remove(a2) # 二、新建catagory: a1是既存,catagory是新增的,一般用于tag標簽,輸入就是添加 # a1.category.create(level=1,title='新增加catagory') # 三、查詢文章所有catagory,article里定義了catagory,所以直接.catagory cata = a1.category.all() # print(cata) # 四、catagory里沒有定義article,所以用.article_set 來引用 articles = c1.article_set.all() # print(articles) # 組合查詢 articles = Article.objects.filter(category__id=15) articles = Article.objects.filter(category=15) # 與上面一樣 # print(articles) articles = Article.objects.filter(category__title__startswith='通知') articles = Article.objects.filter(category__title__startswith='通知').distinct() articles = Article.objects.filter(category__title__startswith='通知').distinct().count() # print(articles) catagorys = Category.objects.filter(article__title__startswith="尊師重教") print(catagorys) catagorys = Category.objects.filter(article__id=127) print(catagorys) catagorys = Category.objects.filter(article__id__in=[126, 127]) # 產生重復 catagorys = Category.objects.filter(article__id__in=[126, 127]).distinct() # 去掉重復 print(catagorys) args = Article.objects.exclude(category=15) # 查到的數據就很多了 print(args)

浙公網安備 33010602011771號